这里使用了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"(我的假设)。
答案 0 :(得分:0)
find_and_modify
假设是原子的,因为它是affects only a single document。来自docs:
修改单个文档时,findAndModify()和 update()方法以原子方式更新文档。
但是,当发生错误时,我没有看到任何明确说明写入是否是原子的文档。
但是,好消息是,如果您知道这样的错误可能会发生,那么使用多线程程序创建一个测试数据库非常容易,该程序用这样的请求轰炸数据库,然后简单地看看它是否& #39;真正的原子与否。