2017-03-17 87 views
0

我正在更新數組內的值。但是,我希望更新驗證該值不能小於零。用條件Mongodb更新

{ 
    _id: ObjectId(), 
    items: [ 
    { 
     _id: ObjectId(), 
     stock: 5 
    } 
    ] 
} 

在這種情況下,如果我想減少-6的股票。我需要查詢引發異常或類似的東西。

我試着用兩個查詢。一個知道實際值,然後如果減法> 0,我做了更新。

有沒有辦法在一個查詢中做到這一點?

+0

爲什麼不檢查條件的select語句:VAR值= 100; db.users.update({ 「名稱」: 「XYZ」, 「得分」:{ 「$ GT」:值}} , { $設置:{ 「分數」:值} }) – Barney

+0

對於那我需要知道數組中文檔的索引。我如何動態獲取它? –

回答

0

您可以利用的事實,ObjectId是在陣列中的每個元素的獨特和使用$位置更新操作要做到這一點美麗

from bson.objectid import ObjectId 

collection.update_one(
    {"items": { 
     "$elemMatch": { 
      "_id" : ObjectId("58ccc8c2dbe8051261b38e58"), 
      "stock": {"$gt": 0 } 
     } 
    }}, 
    {"$inc": {"items.$.stock": -6 }} 
)