mongodb 是否在批量组之间锁定?

Does mongodb lock between bulk groups?

给定一个包含以下格式文档的集合:

{ 
  name:String,
  members: [ { name:String, type: String } ]
}

假设我有一个 mongodb 批量操作,包含两个操作:

问题是:mongodb 会锁定 A 和 B 之间的相关文件吗?以便 A 和 B 之间的其他进程无法对目标文档的 'members' 进行修改?

不,不会。默认情况下,MongoDB 操作对于每个文档都是原子的,而不是在一组文档中(这就是批量操作)。

引自 Atomicity and Transactions 页面:

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 (e.g. db.collection.updateMany()) modifies multiple documents, the modification of each document is atomic, but the operation as a whole is not atomic.

MongoDB 4.0支持multi-document ACID transactions但有一些限制,比如只支持replica sets,事务中的整体数据不能超过16MB。

关于 Spring,MongoDB Lovelace 版本支持 4.0 事务(DATAMONGO-1920). There are examples in this blog post Pivotal。