我有订单收集:
{
orderId: "A1",
items: [
{itemId: "i001", qty: "20", description: "whatever..."},
{itemId: "i004", qty: "10", description: "whatever..."},
....
]
}
{
orderId: "A2"
...
}
如何添加或更新商品,具体取决于 itemId 是否存在 - 针对订单文档?
典型的更新会导致itemid的数量发生变化。
addToSet(如果不存在则添加,但不会更新)和推送(总是添加) - 似乎无法解决此问题。
答案 0 :(得分:0)
您可以尝试使用位置$运算符。
这是使用您的收藏品的例子:
db.Order.update({itemId : "A1", 'items.itemId' : "i001"}, {$inc : {'items.itemId.$.qty' : 10}});
但要小心,只能将它与更新查询一起使用,因为它不适用于upsert