MongoDB:更新数组中的文档

And*_*rey 6 mongodb

我有一个包含此架构文档的集合:

{
    _id: something,
    recipients: [{id:1, name:"Andrey", isread:false}, {id:2, name:"John", isread:false}]
}
Run Code Online (Sandbox Code Playgroud)

现在,我想使用更新John(id = 2)的"isread" findAndModify(),因为我还需要获取原始文档.

我正在尝试这个命令:

db.messages.findAndModify({query:{'recipients.id':2}, update:{'recipients.$.isread':true}})
Run Code Online (Sandbox Code Playgroud)

但它做了什么,它只是用'recipients. $ .isread'替换整个"收件人"字段,所以文档现在看起来像:

{
    _id: someid,
    'recipients.$.isread':true
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

khe*_*eya 7

尝试使用这样的$ set:

db.messages.findAndModify({query:{'recipients.id':2}, update:{$set:{'recipients.$.isread':true}}})
Run Code Online (Sandbox Code Playgroud)