mongodb вставляет элемент в массив объектов - PullRequest
1 голос
/ 11 декабря 2011

У меня есть коллекция со следующей схемой:

{
  "_id" : ObjectId("4ee3ddc346b3b8880a000000"),
  ...
  "msgs" : [{
      "mid" : ObjectId("4ee3ddc346b3b8880a000000"),
      "deleted" : []
    },
    {
      "mid" : ObjectId("4ee3ddc346b3b8880a000100"),
      "deleted" : []
    }]
}

Я хочу сделать этот запрос: для конкретного _id вставьте в каждый «удаленный» массив элемент

, так что после выполненияэтот запрос я получу что-то вроде этого:

{
  "_id" : ObjectId("4ee3ddc346b3b8880a000000"),
  ...
  "msgs" : [{
      "mid" : ObjectId("4ee3ddc346b3b8880a000000"),
      "deleted" : [2]
    },
    {
      "mid" : ObjectId("4ee3ddc346b3b8880a000100"),
      "deleted" : [2]
    }]
}

Что я пытался сделать:

db.dialogs.update(
{ "_id" : ObjectId("4ee3ddc346b3b8880a000000")},
{$addToSet : {'msgs.$.deleted' : 2}}
)

проблема в том, что он обновляет только первый элемент элемента в массиве, а невсе элементы

Есть идеи?

1 Ответ

1 голос
/ 11 декабря 2011

Укажите опцию множественного обновления:

db.dialogs.update(
  { "_id" : ObjectId("4ee3ddc346b3b8880a000000")},
  {$addToSet : {'msgs.$.deleted' : 2}},
  false,
  true
)

Последний параметр true указывает mongodb обновить все соответствующие документы.(третий параметр указывает mongodb не расстраиваться).

PS: вышеизложенное предполагает, что ваш исходный запрос и $ операция верны, я не подтвердил это в MongoDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...