-->

如何更新基于查询的子文件排列的子文档字段?(How can I update the sub doc

2019-10-22 16:25发布

{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
    {
        "bookid": ObjectId("552cd77e31456e192df6ad8e"),
        "isActive": false
    },
    {
        "bookid": ObjectId("552cd77e31456e192df6ad8a"),
        "isActive": true
    }
]
}

我需要更新上述文件,其中,所述条件是source.bookidObjectId("552cd77e31456e192df6ad8e")和更新该特定文档字段isActivefalse 。 因此,所产生的输出,我需要为

{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
    {
        "bookid": ObjectId("552cd77e31456e192df6ad8e"),
        "isActive": false
    },
    {
        "bookid": ObjectId("552cd77e31456e192df6ad8e"),
        "isActive": true
    }
]
}

谁能告诉我,如何执行此更新查询? 并且也有可能获取其中子docments数组包含了所有“isActive”为假的所有文件?

Answer 1:

使用蒙戈更新文件嵌套密钥更新使用$elemMatch查询如下

db.collectionName.update({"source":{"$elemMatch":{"bookid":ObjectId("552cd77e31456e192df6ad8e")}}},{"$set":{"source.$.isActive":false}})

如果多个文档更新,然后用这个蒙戈更新添加多真实。



文章来源: How can I update the sub document field from the sub document array based on the query?