如何根据查询从子文档数组中更新子文档字段?
Posted
技术标签:
【中文标题】如何根据查询从子文档数组中更新子文档字段?【英文标题】:How can I update the sub document field from the sub document array based on the query? 【发布时间】:2015-06-22 10:13:10 【问题描述】:
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
,
"bookid": ObjectId("552cd77e31456e192df6ad8a"),
"isActive": true
]
我需要更新上述文档,其中条件是source.bookid
是ObjectId("552cd77e31456e192df6ad8e")
,并将特定文档字段isActive
更新为false
。所以,我需要的结果输出为
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
,
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": true
]
谁能告诉我,如何执行这个更新查询?并且是否可以检索子文档数组包含所有“isActive”为假的所有文档?
【问题讨论】:
在您的示例文档中,source.bookid
为何与source
数组中的相同?您的意思是要有不同的图书 ID?
No book id is not distinct, it will different
【参考方案1】:
使用mongo update documentation 进行嵌套键更新使用$elemMatch
查询如下
db.collectionName.update("source":"$elemMatch":"bookid":ObjectId("552cd77e31456e192df6ad8e"),"$set":"source.$.isActive":false)
如果多个文档更新则使用这个mongo update add multi true。
【讨论】:
以上是关于如何根据查询从子文档数组中更新子文档字段?的主要内容,如果未能解决你的问题,请参考以下文章