2015-04-16 163 views
1
{ 
"_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 
    } 
] 
} 

任何人都可以告诉我,如何执行此更新查询?也有可能检索所有的文件,其中sub docics数组包含所有“isActive”为假?

+0

在您的示例文档中,'source.bookid'在'source'数组中是如何相同的?你的意思是有不同的书籍ID吗? – chridam

+0

没有书的身份不明确,它会有所不同 – user2425149

回答

0

使用mongo update documentation筑巢密钥更新使用$elemMatch查询如下

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

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