如何使用猫鼬更新数组中的对象字段

时间:2020-03-10 12:00:24

标签: javascript node.js mongodb mongoose

我需要通过 id 查找一个房间,并将接收字段更新为 true ,其中用户id 等于 xx

文档在这里:

{
    "_id" : ObjectId("5e5d0d870fc69641a41a3c65"),
    "users" : [ 
        ObjectId("5e57d64d92cc878760086980"), 
        ObjectId("5e57d64592cc87876008697e")
    ],
    "messages" : [ 
        {
            "_id" : ObjectId("5e67834b6c8b2d356a4ad9fd"),
            "text" : "Hello",
            "user" : ObjectId("5e57d64d92cc878760086980"),
            "createdAt" : ISODate("2020-03-10T12:08:43.006Z"),
            "sent" : true,
            "received" : false
        }, 
        {
            "_id" : ObjectId("5e6783076c8b2d356a4ad9fc"),
            "text" : "Hello",
            "user" : ObjectId("5e57d64d92cc878760086980"),
            "createdAt" : ISODate("2020-03-10T12:07:35.544Z"),
            "sent" : true,
            "received" : true
        }
    ],
    "createdAt" : ISODate("2020-03-02T13:43:35.522Z"),
    "updatedAt" : ISODate("2020-03-10T12:08:43.006Z"),
    "unReads" : {
        "5e57d64d92cc878760086980" : 1,
        "5e57d64592cc87876008697e" : 5
    },
    "__v" : 0
}

****看起来您的帖子大部分是代码;请添加更多详细信息。****

1 个答案:

答案 0 :(得分:1)

您需要the positional $ operator

Model.update({_id: ObjectId("5e5d0d870fc69641a41a3c65"), "messages.user": ObjectId("5e57d64d92cc878760086980")}, { $set: { "messages.$.received": true } })