我的文档具有以下结构:
{
"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}
)
但这没用。
我可以使用哪个查询来执行此更改?
答案 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}
)