MongoDB-修改嵌套列表中的字段名称



正如标题所说,我需要修改的字段嵌套如下:

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

最新更新