簡體   English   中英

java mongodb-僅在范圍內設置字段

[英]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在從countmax范圍內,然后再設置它,我如何實現這一點?

您可以執行兩個請求:將計數器重置為0等於MAX。 然后將計數器增加一。 所有這些都使用mongodb機制(例如findAndModify)來保證原子性!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM