我正在更新数组中的值。但是,我希望更新验证该值不能小于零。
{
_id: ObjectId(),
items: [
{
_id: ObjectId(),
stock: 5
}
]
}
在这种情况下,如果我想减少-6的库存。我需要查询引发异常或类似的东西。
我正在尝试两个查询。一个知道实际值,然后如果减法是> 0,我做了更新。
有没有办法在一个查询中进行此操作?
答案 0 :(得分:1)
您可以利用ObjectId
对于数组中的每个元素都是唯一的这一事实,并使用$
位置更新运算符来完美地执行此操作
from bson.objectid import ObjectId
collection.update_one(
{"items": {
"$elemMatch": {
"_id" : ObjectId("58ccc8c2dbe8051261b38e58"),
"stock": {"$gt": 0 }
}
}},
{"$inc": {"items.$.stock": -6 }}
)