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

问题描述 投票:0回答:1

我有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'。

mongodb mongodb-query
1个回答
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}
)

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.