如何为不同的arrayFilters使用不同的更新文档来更新数组中的元素

时间:2018-06-22 01:35:53

标签: arrays mongodb element

假设以下文档:

{
     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'

我该怎么办?

1 个答案:

答案 0 :(得分:0)

在更新部分中只能有一个$inc,但可以在该对象中定义多个更新。这应该起作用:

db.test.update(
    { flowerId:0 },
    { $inc: { "itemList.$[elem1].num": -2, "itemList.$[elem2].num": -3} },
    { arrayFilters: [ {"elem1.id":1}, {"elem2.id":2} ] }
)