1

执行批量更新时,mongodb 是否会锁定数据库?我正在使用 mongo 批量操作。

var bulk = db.items.initializeUnorderedBulkOp(); bulk.find( { status: "D" } ).updateOne( { $set: { status: "I", points: "0" } }); bulk.find( { status: "A" } ).updateOne( { $set: { status: "B", points: "0" } }); bulk.execute();

假设此操作有 100 次查找和更新,并且正在运行的另一个进程也在尝试更新 db 中的相同集合。

它是否有锁来防止并发更新?

4

1 回答 1

1

假设您使用的是 MongoDB 版本 >= 3.0和WiredTiger存储引擎(这是 MongoDB 版本 >= 3.2 的默认存储引擎),则使用文档级并发控制。

因此,在您的示例中使用 WiredTiger,您的更新可以同时运行。如果两个线程或进程碰巧同时尝试更新同一个文档,MongoDB 将检测写入冲突并透明地重试。

有关更多详细信息,请参阅并发常见问题解答

于 2017-05-18T02:59:02.030 回答