如果更新两个键,函数find_and_modify可以运行一半吗?

时间:2014-08-18 20:06:31

标签: python mongodb pymongo

这里使用了pymongo(Python):

Dict"更新"包含两个键:

collection.find_and_modify(
    query={"_id": self.id},
    update={
        "$set": {"zzz.cur": xxx.chg},
        "$unset": {"zzz.bld": xxx.chg}
    }
)

是否有可能只会执行错误" $ set" ? 另一个(" $ unset")会失败?

或者find_and_modify总是保证两个键都执行? 我正在寻找一个bug。有时在我的数据库中仍然是zzz.bld。 但我不明白为什么。所以我决定澄清一下。

目前看来这个功能有时会失败,只能运行" $ set"(我的假设)。

1 个答案:

答案 0 :(得分:0)

find_and_modify 假设是原子的,因为它是affects only a single document。来自docs

  

修改单个文档时,findAndModify()和   update()方法以原子方式更新文档。

但是,当发生错误时,我没有看到任何明确说明写入是否是原子的文档。

但是,好消息是,如果您知道这样的错误可能会发生,那么使用多线程程序创建一个测试数据库非常容易,该程序用这样的请求轰炸数据库,然后简单地看看它是否& #39;真正的原子与否。