我试图设计一个简单的有界原子计数器,想知道我的想法是否正确。 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?
findAndModify
操作就是原子的。因此,只有当过滤器成立时才会发生增量,即使有多个进程执行相同的更新。在您的情况下,如果许多进程同时运行查询,则只有前十个进程会更新值,其他进程将不匹配。