java mongodb - 仅在范围内设置字段
java mongodb - set a field only if it is in range
在 mongodb 中,我有一个字段必须从 0 到 MAX
(整数最终变量)。
每次该值达到 MAX
时,它必须 return 为 0。
为了执行此操作,我尝试了这个 (java):
Document document = coll.findOneAndUpdate(
filter,
new Document(//update
"$inc",
new Document("counter", 1)
)
);
int count = (document != null) ? document.getInteger("counter") : 0;
if(count >= MAX) {
count-= MAX;
coll.updateOne(filter, new Document("$set", new Document("counter", count));
}
唯一的问题是这不是同步的,如果多个客户端同时访问它,可能会导致计数器丢失一些计数。为了使这个同步,我必须在设置它之前测试 count
在 count
到 max
的范围内,我怎样才能做到这一点?
您可以执行两个请求:将计数器重置为 0,它等于 MAX。然后将计数器加一。所有这些都使用 mongodb 机制,例如 findAndModify,它保证了原子性!
在 mongodb 中,我有一个字段必须从 0 到 MAX
(整数最终变量)。
每次该值达到 MAX
时,它必须 return 为 0。
为了执行此操作,我尝试了这个 (java):
Document document = coll.findOneAndUpdate(
filter,
new Document(//update
"$inc",
new Document("counter", 1)
)
);
int count = (document != null) ? document.getInteger("counter") : 0;
if(count >= MAX) {
count-= MAX;
coll.updateOne(filter, new Document("$set", new Document("counter", count));
}
唯一的问题是这不是同步的,如果多个客户端同时访问它,可能会导致计数器丢失一些计数。为了使这个同步,我必须在设置它之前测试 count
在 count
到 max
的范围内,我怎样才能做到这一点?
您可以执行两个请求:将计数器重置为 0,它等于 MAX。然后将计数器加一。所有这些都使用 mongodb 机制,例如 findAndModify,它保证了原子性!