使用MongoDB的有界原子计数器

rbpvctlc  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(110)

我试图设计一个简单的有界原子计数器,想知道我的想法是否正确。Mongodb有一个名为findAndModify()的操作。此操作接受一个查询。如果查询类似于:

findAndModify: "counter",
 query: { count: { $le: 10 } },
 update: { $inc: { count: 1 } }

.如果count小于10,是否只递增并返回计数器?如果是这样,我的代码基本上可以运行这个,如果没有文档返回,我的代码可以假设计数器是在最大值?
另外,如果多个进程执行相同的操作,这是否保证正确地递增?也就是说,当count = 0时,操作A和操作B同时尝试findAndModify(),操作A将count递增到1,操作B将count递增到2?或者这两个操作都可能使计数器递增到1?

kokeuurv

kokeuurv1#

只要考虑单个文档,findAndModify操作就是原子操作。因此,只有当过滤器保持不变时,才会发生递增,即使有多个进程执行相同的更新。在您的情况下,如果许多进程同时运行查询,则只有前十个进程将更新值,其他进程将不匹配。

相关问题