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

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.bookidObjectId("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。

【讨论】:

以上是关于如何根据查询从子文档数组中更新子文档字段?的主要内容,如果未能解决你的问题,请参考以下文章

春季启动查询以单独从子文档数组中的字段中获取最大值

根据数组字段的子文档_id查找父文档id

如何匹配 MongoDB 中的子文档数组?

如何根据MongoDB中文档字段中的每个数组项过滤集合

如何根据另一个字段更新 mongodb 中的数组 dict 元素

MongoDb:如何根据每个字段的值更新多个文档中的字段值?