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化的方式来做到这一点。
我看过upsert
,insert
,modify
,save
,update
,update_one
mongoengine拥有如此神秘的文档真的很荒谬。我试图基于几个列/字段做一个简单的(如果存在查询,请更新)。我的意思是,如果fieldA具有valueA并且...
首先,Q()仅与按位运算符组合。 Q的含义是结合&
和|
运算符。详细here