Элемент обновления MongoDB в массиве внутри массива - PullRequest
1 голос
/ 06 мая 2020

Я хочу обновить существующий элемент внутри массива в массиве.

Структура моего документа выглядит следующим образом:

    {
  "_id":"a1",
  "projects":[{
    "_id": "b1",
    "title":"Title A",
    "task":[
           {"_id": "c1",
            "title":"Title B"},
            {"_id": "c2",
            "title":"Title C"},
            {"_id": "c3",
            "title":"Title D"}
          ],

}]
}

Допустим, мы хотим изменить "задача": от

{"_id": "c2",
 "title":"Title C"}

до

{"_id": "c2",
 "title":"Title C1"}

Кто-нибудь знает, как правильно обновить этот вложенный документ?

1 Ответ

1 голос
/ 06 мая 2020

Используя комбинацию $set с позиционным оператором и arrayFilters, это должно быть выполнимо:

db.getCollection('so-test').updateOne(
   { _id: "a1"},
   { $set: { "projects.$[].task.$[task].title": "Title C1" } },
   { arrayFilters: [  {"task.title": "Title C"} ]}
)
...