2015-04-16 122 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添加多真實。