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

基于MongoDB实现有界原子计数器的正确性与原子性问询

有界原子计数器的MongoDB实现验证

条件递增与返回结果判断

  • 你的思路是对的:这段findAndModify操作仅在count ≤ 10时才会执行递增。查询条件{ count: { $le: 10 } }会匹配当前计数器值符合要求的文档,只有匹配成功时,才会触发$inc: { count: 1 }的更新逻辑。
  • 可以通过无文档返回判断计数器达最大值:当count已经超过10时,查询条件无法匹配到目标文档,findAndModify会返回null(或无结果),此时即可判定计数器已达到上限10。

并发场景下的递增正确性

完全能保证递增的正确性,不会出现两个进程都把计数器递增到1的情况。因为MongoDB的findAndModify是原子操作——MongoDB会对单个文档的读写操作加锁,并发请求会被串行化处理。比如当count=0时,进程A和B同时发起请求,其中一个会先获得锁,将count从0改成1并释放锁;另一个进程获取锁后,会基于最新的count=1继续递增到2,最终计数器会依次变成1、2,不会出现冲突。

对应的代码示例:

db.runCommand({
  findAndModify: "counter",
  query: { count: { $le: 10 } },
  update: { $inc: { count: 1 } }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:29:58