假设以下文档:
{
itemList:[
{id:20,num:12},
{id:1,num:10},
{id:2,num:12},
{id:12,num:12}],
flowerId:0
}
我如何在单个语句中更新id = 1的元素以使其num减少2,而id = 2的元素以使其num减少3?
这是我的尝试:
db.getCollection('test').update({flowerId:0},
{$inc:{"itemList.$[elem1].num":-2},$inc:{"itemList.$[elem2].num":-3}},
{arrayFilters:[{"elem1.id":1},{"elem2.id":2}]}
)
但它只是打印:
No array filter found for identifier 'elem2' in path 'itemList.$[elem2].num'
我该怎么办?
答案 0 :(得分:0)
在更新部分中只能有一个$inc
,但可以在该对象中定义多个更新。这应该起作用:
db.test.update(
{ flowerId:0 },
{ $inc: { "itemList.$[elem1].num": -2, "itemList.$[elem2].num": -3} },
{ arrayFilters: [ {"elem1.id":1}, {"elem2.id":2} ] }
)