如何elemMatch在MongoDB中的多个阵列上?

时间:2018-09-03 09:57:47

标签: mongodb mongodb-query

我有2个不同的数组,如下所示:

id: 100,
a: [
   {date: '2018-09-03', aa: 0},
   {date: '2018-09-04', aa: 0},
   {date: '2018-09-05', aa: 0},
],
b: [
   {date: '2018-09-03', bb: 0},
   {date: '2018-09-04', bb: 0},
   {date: '2018-09-05', aa: 0},
]

我需要将 aa 增加 10 ,将 bb 增加 20 。所以我就是这样:

{$and: [
    {id: 100},
    {a: {$elemMatch: {date: '2018-09-04'}}},
    {b: {$elemMatch: {date: '2018-09-04'}}},
]}, {
    $inc: {
        "a.$.aa": 10,
        "b.$.bb": 20
    }
} 

问题是elemMatches不起作用,它们采用数组的第一个元素。在此示例中:“ 2018-09-03”而不是“ 2018-09-04”。

1 个答案:

答案 0 :(得分:0)

$ elemMatch不是一个好方法,必须将$[identifier]与arrayFilters选项一起使用。这应该可以工作:

db['01'].update(
{id:100},
{$inc: {
        "a.$[elementA].aa": 10,
        "b.$[elementB].bb": 20
    }}
,{arrayFilters:[{"elementA.date":"2018-09-03"},{"elementB.date":"2018-09-03"}],
  multi:true}
)

希望有帮助