You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两台机器同时更新数据库时modifiedCount是否必然一个为1一个为0?

并发更新同一条订单记录的返回值结论

只要你使用的是支持文档级/行级原子操作的主流数据库(如MongoDB、MySQL InnoDB引擎等),该场景下可以100%保证两台机器的返回结果永远是一台modifiedCount = 1,另一台modifiedCount = 0,不会出现两个1或者两个0的情况。

原理说明

你代码中调用的updateOne操作在数据库层面是原子执行的,整个匹配+更新的过程不会被其他请求打断:

  • 数据库执行该操作时会先给匹配到的目标记录加锁,同一时间只有一个请求能持有锁完成操作
  • 第一个拿到锁的请求成功将paid字段改为true后释放锁,第二个请求再执行匹配时,已经没有符合orderNumber: 1, paid: false条件的记录,因此不会触发更新,返回修改数为0

注意事项

  • 该逻辑成立的前提是orderNumber字段有唯一索引,保证筛选条件只会匹配到最多一条记录
  • 不要把逻辑拆成「先查询订单状态、再判断是否更新」的非原子操作,那样会出现并发竞争导致的重复更新问题,直接把状态判断写在updateOne的筛选条件里是分布式场景下避免并发冲突的最优实践之一

内容的提问来源于stack exchange,提问作者manidos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:07