正如标题所说,我需要修改的字段嵌套如下:
basicData.owners.relatedJson.basicData.devices.equipmentID
其中CCD_ 2和CCD_。
对象看起来像这样:
{
"basicData": {
"owners": [
{
"relatedJson": {
"basicData": {
"devices": [
{
"equipmentID": "abcd",
"type": "camera"
}
],
"otherFieldsBasicData": "other values",
"evenMoreFieldsBasicData": "other values"
},
"otherFieldsRelatedJson": "other values",
"evenMoreFieldsRelatedJson": "other values"
}
}
]
}
}
我想将equipmentID
重命名为equipmentId
。
我也问过这个问题,我一直试图以此为起点创建一个查询,但没有成功。
我能够构建一个查询,它可以深入到devices
列表,但是。然后我想调用该列表中的$set
,但我得到了一个错误,因为您不能在$mergeObjects
中调用set。
我认为有一些方法可以使用$[]
来帮助迭代第一个数组,但我无法使其工作。我认为这种做法是错误的
这就是我最终得到的结果,但不起作用:
db.myCollection.updateMany({"basicData.owners.relatedJson.basicData.devices.equipmentID": {$exists: true}},
[
{
$set: {
"basicData.owners$[].relatedJson.basicData.devices": {
$map: {
input: "$basicData.owners$[].relatedJson.basicData.devices", in: {
$mergeObjects: ["$$this",
{equipmentId: "$$this.equipmentID",}]
}
}
}
}
},
{
$unset: "basicData.owners.relatedJson.basicData.devices.equipmentID"
}
])
如有任何建议,我们将不胜感激。
认为您需要两个$map
(带有嵌套(运算符。
第一个$map
迭代basicData.owners
数组,而另一个$map
用于迭代relatedJson.basicData.devices
数组。
db.collection.updateMany({
"basicData.owners.relatedJson.basicData.devices.equipmentID": {
$exists: true
}
},
[
{
$set: {
"basicData.owners": {
$map: {
input: "$basicData.owners",
in: {
$mergeObjects: [
"$$this",
{
"relatedJson": {
$mergeObjects: [
"$$this.relatedJson",
{
"basicData": {
$mergeObjects: [
"$$this.relatedJson.basicData",
{
"devices": {
$map: {
input: "$$this.relatedJson.basicData.devices",
in: {
$mergeObjects: [
"$$this",
{
equipmentId: "$$this.equipmentID",
}
]
}
}
}
}
]
}
}
]
}
}
]
}
}
}
}
},
{
$unset: "basicData.owners.relatedJson.basicData.devices.equipmentID"
}
])
演示@Mongo Playground