如何重命名 MongoDB 中对象数组中的嵌套键?

2024-05-05

文件结构

{
  _id: 5,
  grades: [
     { grade_ : 80, mean: 75, std: 8 },
     { mean: 90, std: 5 },
     { mean: 85, std: 3 }
  ]
}

根据 mongodb 中的上述文档结构,我想将键grade_重命名为grade

db.collection.update({"_id":5},{"$rename":{"grades.grade_":"grades.grade"}},{"upsert":false,"multi":true})

这给出了以下错误

"writeError" : {
        "code" : 28,
        "errmsg" : "cannot use the part (grades of grades.grade_) to traverse the element ({grades: [ { grade_: 80.0, mean: 75.0, std: 8.0 }, { mean: 90.0, std: 5.0 }, { mean: 85.0, std: 3.0 } ]})"
    }

我想将键grade_重命名为grade,预期输出

{
  _id: 5,
  grades: [
     { grade : 80, mean: 75, std: 8 },
     { mean: 90, std: 5 },
     { mean: 85, std: 3 }
  ]
}

根据 MongoDB 文档:($rename如果这些字段位于数组元素中,则不起作用。)

对于嵌入文档中的字段,$rename 运算符可以重命名这些字段以及将字段移入和移出嵌入文档。如果这些字段位于数组元素中,$rename 不起作用。

因此,您需要编写自定义逻辑来进行更新。

db.collection.find({
  "grades.grade_": { $exists : 1 }
}).forEach( function( doc ) {
  for( i=0; i < doc.grades.length; i++ ) {
    if(doc.grades[i].grade_ != undefined) {
      doc.grades[i].grade = doc.grades[i].grade_;
      delete doc.grades[i].grade_;
    }
  }
  db.collection.update({ _id : doc._id }, doc);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重命名 MongoDB 中对象数组中的嵌套键? 的相关文章

随机推荐