首页 > 解决方案 > 如何在 MongoDB 中删除双嵌套数组中的元素

问题描述

我正在研究mongo,此时需要从嵌套在另一个数组中的特定元素中删除,结构如下:

{ 
    "_id" : ObjectId("5e616314946b6d3ac4ed8252"), 
    "uid" : "5db069478556622b4a0adca5", 
    "areas" : [
        {
            "name" : "mexico", 
            "elements" : [
                "23452345", 
                "24454675"
            ], 
        }, 
        {
            "name" : "usa", 
            "elemets" : [
                "123123123", 
                "1234334"
            ], 
        }
    ]
}

所以我需要一个查询,让我删除“元素”属性中的任何元素。

我尝试使用此查询,但无法访问它。

db.areas.update(
    { },
    { $pull: 
        { areas: { 
            $elemMatch: { 
                elements: { $eq : "123123123" }
                }
            }
        }
    },
    { multi:false }
);

这只是说

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

标签: mongodbmongodb-query

解决方案


这是update用于删除子数组 ( elements) 中的特定数组元素的方法。

注意要移除(pull)指定元素(elementsvalue "24454675"),需要指定outer-array的元素匹配条件(注意outer-array field有两个元素areas)。

db.areas.update(
   { "areas.name": "mexico" },
   { $pull: { "areas.$.elements":  "24454675" } }
)

注意:如果不指定条件,则数组{ "areas.name": "mexico" }的整个子文档将被删除。areas


推荐阅读