Я пытаюсь обновить данные в моем MongoDB (4.2), используя обновление с конвейером. Сложность в том, что я хочу добавить поле в элемент массива в зависимости от другого поля. Также я хочу сделать это для каждого элемента. Я знаю, что могу сделать по Javascript для каждого, но мне было интересно, есть ли лучший способ. Вот что я хочу сделать в качестве примера
До:
{
"_id" : ObjectId("555555555"),
"messages" : [
{
"author" : {
"userId" : "12345",
"name" : "John"
},
"text" : "Any text",
},
{
"author" : {
"userId" : "56789",
"name" : "Jim"
},
"text" : "also text"
}
]
}
После
{
"_id" : ObjectId("555555555"),
"messages" : [
{
"author" : {
"userId" : "12345",
"name" : "John",
"newId" : "00012345"
},
"text" : "Any text",
},
{
"author" : {
"userId" : "56789",
"name" : "Jim",
"newId" : "00056789"
},
"text" : "also text"
}
]
}
Что я пробовал:
db.mail.update(
{"_id" : ObjectId("555555555")},
[{ $set: { "messages.$[].author.newId": { $concat: [ "000", "$messages.$[].author.userId"]}}}],
{ multi: true, writeConcern: {w: 0} }
)
Кто-нибудь знает, как решить эту проблему? Спасибо