Как обновить документ в объекте в массиве в объекте в массиве, используя MongoDB? - PullRequest
1 голос
/ 29 февраля 2020

Использование запросов MongoDB: 1. Как мне найти объект с _id A3? 2. Как мне обновить объект с _id A3 до A4? Обратите внимание: База данных - это массив объектов, в котором один ключ имеет массив объектов

[{
"project_name": "ProjectA",
"issues":[{"issue_title":"TitleA1", "_id":"A1"},
          {"issue_title":"TitleA2","_id":"A2"},
          {"issue_title":"TitleA3","_id":"A3"}]
},
{
"project_name": "ProjectB",
"issues":[{"issue_title":"TitleB1", "_id":"B1"},
          {"issue_title":"TitleB2","_id":"B2"},
          {"issue_title":"TitleB3","_id":"B3"}]
}
]

1 Ответ

2 голосов
/ 29 февраля 2020

Вы можете использовать точечную нотацию до $ match вашего объекта по вложенному _id и использовать $ unwind с $ replace Root для продвижения вложенного объекта на верхний уровень:

db.collection.aggregate([
    {
        $unwind: "$issues"
    },
    {
        $match: { "issues._id": "A3" }
    },
    {
        $replaceRoot:{ newRoot: "$issues" }
    }
])

Пн go Детская площадка

может использоваться позиционный оператор чтобы обновить это:

db.col.updateOne({ "project_name": "ProjectA", "issues._id": "A3" }, { $set: { "issues.$._id": "A4" } })
...