Lir*_*man 3 mongodb mongodb-query
我的文档具有以下结构:
{
"Name": "Test",
"FieldsCollection": [{
"GroupName": "Group",
"Fields": [{
"FieldName": "ABC",
"Fields": {
"item1": "value1",
"item2": "value2"
}
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我需要将其更改为如下:
{
"Name": "Test",
"FieldsCollection": [{
"GroupName": "Group",
"Fields": [{
"FieldName": "ABC",
"item1": "value1",
"item2": "value2"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
假设"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}
)
Run Code Online (Sandbox Code Playgroud)
但它没有用。
我可以使用什么查询来执行此更改?
在 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 }
)
Run Code Online (Sandbox Code Playgroud)