[英]java mongodb - set a field only if it is in range
在mongodb中,我有一个必须从0到MAX
(整数最终变量)的字段。 每次值达到MAX
它都必须返回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)来保证原子性!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.