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

How can I update the sub document field from the sub document array based on the query?

{
"_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?

使用mongo update documentation进行嵌套键更新使用$elemMatch查询如下

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

如果多个文件更新然后使用这个mongo update add multi true.