pymongo 中的 find_one_and_update() 是原子的吗?

Is find_one_and_update() in pymongo atomic?

我找不到任何文档说明 pymongo 中的 find_one_and_update() 是原子的(即,在搜索和更新之间不会出现对文档的更改)。我可以相信它是原子的吗?或者是否有另一种方法以保证原子的方式执行相同的操作?

PyMongo 的 find_one_and_update 是原子的,因为它转换为服务器的 findOneAndUpdate 是原子的 (https://docs.mongodb.com/manual/core/write-operations-atomicity/#atomicity)。

但是,请注意插入新文档时的“故障”。当不在查询字段上使用唯一索引时,具有相似查询字段的 findOneAndUpdate 操作的多个实例可能会导致在某些情况下插入重复文档。 (https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/#upsert-with-unique-index)