2014-03-04 17 views
1

我需要知道是否插入了一個upsert,使用MongoEngine(或者如果有必要,pymongo)。如何判斷我是否在沒有(不建議使用的)get_or_create的情況下在mongoengine的upsert中插入?

的代碼看起來是這樣的:

ret = MyMongoCollection.objects(name=desiredname) 
      .update_one({ upsert: True, field1: 2 }) 

Mongoengine似乎只返回 「num_affected」 這始終是正好1這裏,顧名思義。

我知道這些存在,但我正在尋找Python的味道。

回答

1

下面是使用pymongo另外一個答案是始終提供相關的ID。如果該字段是新的,上面的update()答案只會爲您提供ID。

upsert_results = MyMongoCollection._get_collection().find_and_modify(
    { 
     'name':desiredName, 
     # NOTE: _cls (below) only necessary if you meta.allow_inheritance=True 
     '_cls': MyMongoCollection._class_name 
    }, 
    {'$set': {'field1': 2}}, # always provide a $set even if {} or it will no-op. 
    upsert=True, full_response=True, new=True, fields=['_id']) 

obj_id = upsert_results['value']['_id'] 
obj_created = not upsert_results['lastErrorObject']['updatedExisting'] 
0

我找不到一條直線Mongoengine的答案,但在PyMongo混合,等效呼叫:

upsert_results = MyMongoCollection._get_collection().update(
    { 
     'name':desiredName, 
     # NOTE: _cls (below) only necessary if you meta.allow_inheritance=True 
     '_cls': MyMongoCollection._class_name 
    }, 
    {'$set': {'field1': 2}}, 
    upsert=True, multi=False) 

obj_id = upsert_results.get('upserted',False) # key only exists if true. 
obj_created = not upsert_results['updatedExisting'] 
相關問題