MongoDB: обновление документа в массиве - PullRequest
6 голосов
/ 24 июня 2011

У меня есть коллекция с документами этой схемы:

{
    _id: something,
    recipients: [{id:1, name:"Andrey", isread:false}, {id:2, name:"John", isread:false}]
}

Теперь я хочу обновить «isread» для Джона (id = 2), используя findAndModify(), потому что мне также нужно получитьоригинальный документ.

Я пытаюсь выполнить эту команду:

db.messages.findAndModify({query:{'recipients.id':2}, update:{'recipients.$.isread':true}})

, но для этого она просто заменяет целое поле «Получатели» на «Получатели. $. isread», поэтомуТеперь документ выглядит так:

{
    _id: someid,
    'recipients.$.isread':true
}

Что я делаю не так?

1 Ответ

7 голосов
/ 24 июня 2011

Попробуйте использовать $ set следующим образом:

db.messages.findAndModify({query:{'recipients.id':2}, update:{$set:{'recipients.$.isread':true}}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...