MongoDB-如何从嵌套数组中的元素中删除字段?

时间:2018-07-11 12:13:38

标签: mongodb mongodb-query

我的文档具有以下结构:

{
    "Name": "Test",
    "FieldsCollection": [{
        "GroupName": "Group",
        "Fields": [{
            "FieldName": "ABC",
            "Fields": {
                "item1": "value1",
                "item2": "value2"
            }
        }]
    }]
}

我需要将其更改为以下内容:

{
    "Name": "Test",
    "FieldsCollection": [{
        "GroupName": "Group",
        "Fields": [{
            "FieldName": "ABC",
            "item1": "value1",
            "item2": "value2"
        }]
    }]
}

假设"item1": "value1","item2": "value2"的值在我的收藏集中的所有文档中都是恒定的,我想我可以删除"FieldsCollection.Fields.Fields"并添加"item1": "value1","item2": "value2"

我尝试了以下查询:

db.getCollection('Devices').update(
    {"FieldsCollection.Fields.FieldName":"ABC"},
    {$unset: {"FieldsCollection.Fields.Fields":1}},
    {multi:true}
)

但这没用。

我可以使用哪个查询来执行此更改?

2 个答案:

答案 0 :(得分:2)

在3.6版中使用位置$[all](第一级)和位置[<identifier>](第二级)

类似

db.getCollection('Devices').update(
    {"FieldsCollection.Fields.FieldName":"ABC"},
    {$unset: {"FieldsCollection.$[].Fields.$[f].Fields":1}, 
     $set:{"FieldsCollection.$[].Fields.$[f].item1":"value1",
           "FieldsCollection.$[].Fields.$[f].item2":"value2"}
    },  
    {arrayFilters: [{ "f.FieldName":"ABC"} ],multi:true }
)

答案 1 :(得分:0)

由于您的Fields.Fields是一个对象,因此非常困难。

这是要删除的查询:

db.getCollection('Devices').update(
    {Name : "test", "FieldsCollection.Fields.FieldName":"ABC"},
    {$unset: {"FieldsCollection.Fields.$.Fields":1}},
    {multi:true}
)