Как elemMatch на нескольких массивах в MongoDB? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть 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 голосов
/ 04 сентября 2018

$ elemMatch - не лучший способ, вы должны использовать $ [идентификатор] с параметром 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}
)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...