我需要在mongodb中创建一个文档,然后立即在我的应用程序中使用它。执行此操作的常规方法是(在Python代码中):
doc_id = collection.insert({'name':'mike', 'email':'mike@gmail.com'})
doc = collection.find_one({'_id':doc_id})
这有两个问题:
所以,我尝试使用find_and_modify
操作在upserts
的帮助下有效地执行“创建并返回”:
doc = collection.find_and_modify(
# so that no doc can be found
query= { '__no_field__':'__no_value__'},
# If the <update> argument contains only field and value pairs,
# and no $set or $unset, the method REPLACES the existing document
# with the document in the <update> argument,
# except for the _id field
document= {'name':'mike', 'email':'mike@gmail.com'},
# since the document does not exist, this will create it
upsert= True,
#this will return the updated (in our case, newly created) document
new= True
)
这确实按预期工作。我的问题是:这是否是完成“创造和回归”的正确方法,还是我遗失了任何问题?
答案 0 :(得分:1)
您在普通的普通插入电话中究竟缺少什么?
如果它不知道_id将是什么,你可以先自己创建_id并插入文档。然后你就知道它的样子。其他任何字段都不会与您发送到数据库的字段不同。
如果您担心插入成功,可以检查返回代码,并设置write concern,提供足够的保证(例如已将其刷新到磁盘或复制到足够的节点) )。