我有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'。
$ 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}
)
希望能帮助到你