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));
}

唯一的问题是这不是同步的,如果多个客户端同时访问它,可能会导致计数器丢失一些计数。为了使这个同步,我必须在设置它之前测试 countcountmax 的范围内,我怎样才能做到这一点?

您可以执行两个请求:将计数器重置为 0,它等于 MAX。然后将计数器加一。所有这些都使用 mongodb 机制,例如 findAndModify,它保证了原子性!