Обновить элементы в свойстве с типом массива на MongoDB - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть коллекция с такими документами, как:

{
  "_id": "Mongo ObjectID",
  "some_prop": "some_value",
  "features": [
    { "name": "A", "icon": "01.png" },
    { "name": "B", "icon": "02.png" }
  ]
}

Другой образец документа:

{
  "_id": "Mongo ObjectID",
  "some_prop": "other one",
  "features": [
    { "name": "B", "icon": "02.png" },
    { "name": "C", "icon": "03.png" },
    { "name": "D", "icon": "04.png" }
  ]
}

Обратите внимание, что в первом и втором документе есть одна и та же функция B.встречается во многих документах.

Мне нужно обновить все функции B до нового значка, примерно так:

{ "name": "B", "icon": "10.png" }

Мне нужно применить это изменение ко всем документам, которые имеютфункция с именем B.

Я уже написал очень ужасный код, чтобы получить все документы и обновить их один за другим в цикле.Но я думаю, что есть лучший способ сделать это, возможно, с помощью одной команды collection.update?Я новичок в MongoDB, и пока поиск в Google не работал.

1 Ответ

0 голосов
/ 26 февраля 2019

Вам необходимо использовать $positional operator для обновления полей внутри массива

db.collection.updateMany(
  { "features.name": "B" },
  { "$set": { "features.$.icon": "10.png" }}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...