mongodb 3.6 arrayFilters ожидал одно имя поля верхнего уровня - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь обновить вложенный массив с помощью arrayFilters, похоже, он должен работать, в соответствии с документацией, но у меня есть ошибка:

Ошибка анализа массива фильтра: ожидается одно имя поля верхнего уровня, найдено 'w' и 'd'

запрос выглядит так:

db.getCollection("timesheets").update( {
     "year": "2018",
     "month": "06"    },    {
     "$set": {
       "workers.$[w].days.$[d]": {
         "day": 9,
         "month": "06",
         "year": "2018",
         "isHoliday": false,
         "isSaturday": true,
         "isSunday": false,
         "canEditPlanned": true
       }
     }    },   {
     "arrayFilters": [
       {

             "w._id": "XT5PFAPN9TFY3jXtJ",
             "d.day": 9

       }
     ]    })

1 Ответ

0 голосов
/ 27 июня 2018

При использовании arrayFilters до для обновления вложенного массива каждый вложенный уровень фильтра должен быть определен в своем собственном элементе массива arrayFilters:

db.getCollection("timesheets").update({
    "year": "2018",
    "month": "06"
  }, {
    "$set": {
      "workers.$[w].days.$[d]": {
        "day": 9,
        "month": "06",
        "year": "2018",
        "isHoliday": false,
        "isSaturday": true,
        "isSunday": false,
        "canEditPlanned": true
      }
    }
  }, {
    "arrayFilters": [
      {
         "w._id": "XT5PFAPN9TFY3jXtJ"
      },
      {
         "d.day": 9
      }
    ]
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...