如何根据查询更新子文档数组中的子文档字段?

时间:2015-04-16 06:52:39

标签: mongodb subdocument

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

我需要更新上述文档,其中条件为source.bookidObjectId("552cd77e31456e192df6ad8e"),并将该特定文档字段isActive更新为false。所以,我需要的结果输出为

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

任何人都可以告诉我,如何执行此更新查询?还可以检索子文档数组中包含所有“isActive”为false的所有文档吗?

1 个答案:

答案 0 :(得分:0)

使用mongo update documentation嵌套密钥更新使用$elemMatch查询,如下所示

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

如果多个文档更新,则使用此mongo update添加多个真实。