Сбой обновления с использованием фильтра массива - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь выполнить следующий запрос:

db.getCollection("item").update({},
    {
        "$set":{"questions.optional.$[].items.$[item_field].name":"immediately"}
    },
    {
        "arrayFilters":
        [
            {"item_field.id": "5bf3c907449f4978200dd581"}
        ],
        multi: true
    }
)

Но в результате я получаю следующую ошибку:

"Error parsing array filter :: caused by :: The top-level field name must be an alphanumeric string beginning with a lowercase letter, found 'items_field'"

Это упрощенная версия документа:

{
  "_id": ObjectId("12345678"),
  "questions": {
    "mandatory": [
      {
        "name": "question name",
        "mandatory": true,
        "items": [
          {
            "id": 1,
            "name": "option1 value"
          }
        ]
      }
    ],
    "optional": [
      {
        "name": "question name",
        "mandatory": false,
        "items": [
          {
            "id": 4,
            "name": "option4 value"
          }
        ]
      }
    ]
  }
}

Что означает эта ошибка? Как я могу избежать этого?

1 Ответ

0 голосов
/ 30 октября 2019

В вашем случае проблема в названии "item_field". MongoDB не поддерживает символ подчеркивания в этом сценарии. Изменение имени «item_field» на «itemField» разрешает команду обновления:

Обновление:

db.getCollection("item").update({},
    {
        "$set":{"questions.optional.$[].items.$[itemField].name":"immediately"}
    },
    {
        "arrayFilters":
        [
            {"itemField.id": 4}
        ],
        multi: true
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...