mongodb $set更新同一文档不同字段,会产生脏数据么

mongodb $set更新同一文档不同字段,会产生脏数据么
高并发下可能同时更新不同字段,比如俩人同时更新,A更新字段一,B更新字段二。会不会A在更新的同时B也在更新然后A更新的字段又回去了。有篇文章说$set是更新某个字段,这个操作是原子的。但是我没有在比较多的地方或者比较权威的地方看到这个描述。不会产生上边我说的这个问题吧?

mongoDB修改器之$set by lockymeng
大概就是下边俩句同时执行
db.users.update({"name":"mfw"},{"$set":{"addr":"shandong"}})
db.users.update({"name":"mfw"},{"$set":{"mobile":"13333333333"}})

更正一下,已经确认是原子操作,是我看的不仔细,但是我还是有点疑惑同时更新不同字段有影响么

阅读 7.1k
1 个回答

mongo 对单一文档的写操作总是原子的.
其实题主是想要一个权威的说法, 肯定没有什么比官方文档更权威了:

In MongoDB, a write operation is atomic on the level of a single document, even if the operation modifies multiple embedded documents within a single document.

When a single write operation modifies multiple documents, the modification of each document is atomic, but the operation as a whole is not atomic and other operations may interleave.

在 mongo 中, 单个文档的写操作总是原子的, 即使同时更新单一文档中的多个嵌套文档也是如此.

当一个操作同时更新了多个文档的时候, 该操作对每个单一文档的写操作是原子的, 但整个批量更新操作并不是原子的, 其他操作有可能会被交错执行.

参考: mongo 官方文档 - Atomicity and Transactions

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题