首页 > 解决方案 > 是否保证两个更新请求返回不同的结果?

问题描述

几天来我一直在寻找答案,但没有任何运气。我需要知道两台机器同时更新远程数据库时的预期行为。

更新方法

async function update () {
  const filters = { orderNumber: 1, paid: false }
  const updates = { paid: true }
  const { modifiedCount } = await OrderModel.updateOne(filters, updates)
} 

是否保证modifiedCount一台机器始终为 0,另一台机器始终为 1?

标签: mongodbmongoose

解决方案


根据文档

MongoDB 使用锁定和并发控制来防止客户端同时修改相同的数据。

和:

除了用于读取的共享 (S) 锁定模式和用于写入操作的排他 (X) 锁定模式之外,意向共享 (IS) 和意向排他 (IX) 模式表示使用更细粒度锁读取或写入资源的意向.

因此存在用于写操作的锁独占 (X)。

所以是的,只有一次更新会同时进行。

还检查一些常见的客户端操作使用了哪些锁?

手术 数据库 收藏
更新数据 独家的 独家的

推荐阅读