gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:48:45 26 4
gpt4 key购买 nike

文档结构

{
_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 如果这些字段在数组元素中则不起作用。)

For fields in embedded documents, the $rename operator can rename these fields as well as move the fields in and out of embedded documents. $rename does not work if these fields are in array elements.

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

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);
});

关于mongodb - 如何重命名 MongoDB 对象数组中的嵌套键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com