我有一个 mongodb 集合,其中包含许多这样的对象:
{
"_id" : "1234",
"type" : "automatic",
"subtypes" : [
{
"_id" : "dfgd",
"name" : "test subtype",
"subjetRequired" : true,
},
{
"_id" : "dfgd",
"name" : "test subtype2",
"subjetRequired" : false,
}
],
"anotherField" : "some value"
}
如您所见,subtypes
数组中的键之一拼写错误 - “subjetRequired”而不是“subjectRequired”。
我想更正该键名。我怎样才能做到这一点。
首先我要说的是我过去并没有太多地使用 mongodb。
经过大量研究后,我能想到的最好的方法是以下(不起作用):
function remap(doc) {
subtypes = doc.subtypes;
var count = 0;
subtypes.forEach(function(subtype){
db.taskType.update({"_id": subtype._id}, {
$set: {"subtypes.subjectRequired" : subtype.subjetRequired},
$unset: {"subtypes.subjetRequired": 1}
});
}
)
}
db.taskType.find({"subtypes.subjetRequired":{$ne:null}}).forEach(remap);
这不起作用。
我知道循环是正确的,就好像我用打印语句替换其他逻辑一样,我可以访问并打印我想要修改的姓名的字段。
我在这里做错了什么?
最佳答案
您可以使用此更新并避免使用任何代码,它也很稳定,因此您可以放心地多次执行它。
db.collection.updateMany({
"subtypes.subjetRequired": {
$exists: true
}
},
[
{
$set: {
subtypes: {
$map: {
input: "$subtypes",
in: {
$mergeObjects: [
"$$this",
{
subjectRequired: "$$this.subjetRequired",
}
]
}
}
}
}
},
{
$unset: "subtypes.subjetRequired"
}
])
关于mongodb - 如何修改 mongodb 中嵌套对象数组中的字段名称/键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73473302/