我有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”。
答案 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}
)
希望有帮助