使用 mongodb 的有界原子计数器

问题描述 投票:0回答:1

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

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

...如果计数小于 10,这只会增加并返回计数器吗?如果是这样,我的代码基本上可以运行这个,如果没有返回文档,我的代码可以假设计数器处于最大值?

此外,如果多个进程执行相同的操作,是否可以保证正确递增?即,当 count = 0 时,操作 A 和操作 B 同时尝试 findAndModify(),操作 A 会将 count 增加到 1,而操作 B 会将 count 增加到 2?或者是否有可能这两个操作都会将计数器增加到 1?

mongodb concurrency atomic
1个回答
0
投票
只要考虑单个文档,

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

© www.soinside.com 2019 - 2024. All rights reserved.