0

我需要在 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
)

这确实按预期工作。我的问题是:这是否是完成“创建和返回”的正确方法,还是我缺少任何问题?

4

1 回答 1

1

您从一个普通的旧常规插入调用中究竟缺少什么?

如果不知道 _id 是什么,您可以先自己创建 _id 并插入文档。然后你就知道它会是什么样子了。其他字段都不会与您发送到数据库的字段不同。

如果您担心插入成功的保证,您可以检查返回代码,并设置一个写关注点,以提供足够的保证(例如它已被刷新到磁盘或复制到足够的节点)。

于 2013-03-28T12:20:07.100 回答