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

我需要更新上面的文档,条件是source.bookidisObjectId("552cd77e31456e192df6ad8e")并将特定文档字段更新isActivefalse. 所以,我需要的结果输出为

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

谁能告诉我,如何执行这个更新查询?并且是否可以检索子文档数组包含所有“isActive”为假的所有文档?

4

1 回答 1

0

使用mongo 更新文档进行嵌套键更新使用$elemMatch查询,如下所示

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

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

于 2015-04-16T07:02:49.323 回答