使用条件Mongodb更新

时间:2017-03-17 21:25:24

标签: mongodb python-3.x pymongo

我正在更新数组中的值。但是,我希望更新验证该值不能小于零。

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

在这种情况下,如果我想减少-6的库存。我需要查询引发异常或类似的东西。

我正在尝试两个查询。一个知道实际值,然后如果减法是> 0,我做了更新。

有没有办法在一个查询中进行此操作?

1 个答案:

答案 0 :(得分:1)

您可以利用ObjectId对于数组中的每个元素都是唯一的这一事实,并使用$位置更新运算符来完美地执行此操作

from bson.objectid import ObjectId

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