[英]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.