如果存在,如何更新,如果不使用mongoengine(python),如何插入]]

问题描述 投票:0回答:1

mongoengine拥有如此神秘的文档真的很荒谬。我试图基于几个列/字段做一个简单的(如果存在查询,请更新)。我的意思是

if fieldA has valueA and 
   fieldB has valueB and 
   fieldC has valueC 
then
update fieldD with newValueD, 
       fieldE with newValueE

我可以在下面提到的方法中做到这一点,但是我很确定有一个非常简单的upsert语法,如果我提到字段和值,那么它将在整个集合中匹配它,如果它们匹配则更新,如果不匹配则插入

def __generateRemoteData(data):
    """
    Utils function to add remote data to Mongo

    """
    for datum in data:
        query = RemoteGraph.objects(
            Q(fieldA=datum.get('fieldA')) and
            Q(fieldB=datum.get('fieldB')) and
            Q(fieldC=datum.get('fieldC')) and
            Q(fieldD=datum.get('fieldD')) and
            Q(fieldE=datum.get('fieldE')) and
            Q(date=datum.get('date'))
        )
        if not query:
            RemoteGraph(
                fieldA=datum.get('fieldA'),
                fieldB=datum.get('fieldB'),
                fieldC=datum.get('fieldC'),
                fieldD=datum.get('fieldD'),
                fieldE=datum.get('fieldE'),
                date=datum.get('date'),
                fieldF=datum.get('fieldF'),
                fieldG=datum.get('fieldG'),
            ).save()
        else:
            query.update(
                set__fieldF=datum.get('fieldF'),
                set__fieldG=datum.get('fieldG'),
            )

正在寻找更Python化的方式来做到这一点。

我看过upsertinsertmodifysaveupdateupdate_one

mongoengine拥有如此神秘的文档真的很荒谬。我试图基于几个列/字段做一个简单的(如果存在查询,请更新)。我的意思是,如果fieldA具有valueA并且...

python python-3.x mongodb mongoengine flask-mongoengine
1个回答
0
投票

首先,Q()仅与按位运算符组合。 Q的含义是结合&|运算符。详细here

© www.soinside.com 2019 - 2024. All rights reserved.