我需要知道是否使用MongoEngine(或者如果需要,pymongo)插入了插件。
代码如下所示:
ret = MyMongoCollection.objects(name=desiredname)
.update_one( { upsert: True, field1: 2 } )
Mongoengine似乎只返回" num_affected"根据定义,这里总是精确到1。
我知道这些存在,但我正在寻找Python风格。
答案 0 :(得分: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']
答案 1 :(得分: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']