如何将含德语键的JSON转换为MongoDB Mongoose英文Schema格式?
解决德语键名JSON转Mongoose英文Schema格式的方案
针对结构一致但键名语言不同的转换需求,这里提供两种高效的批量转换方案,无需手动逐字段赋值:
方法1:键名映射+递归转换(纯JS实现)
通过定义键名映射表,配合递归函数处理嵌套结构,适合需要在Mongoose之外也使用转换后数据的场景。
步骤1:定义键名映射表
将需要转换的德语键与对应的英文键一一对应:
const keyMapping = { 'Benutzer': 'User', 'Vorname': 'Firstname', 'Nachname': 'Lastname' // 后续新增转换键直接添加即可 };
步骤2:编写递归转换函数
遍历对象/数组的所有层级,自动替换键名:
function convertKeyNames(obj, mapping) { // 处理数组:遍历每个元素递归转换 if (Array.isArray(obj)) { return obj.map(item => convertKeyNames(item, mapping)); } // 处理对象:遍历每个键替换并递归处理值 if (obj && typeof obj === 'object') { return Object.keys(obj).reduce((result, key) => { // 优先用映射后的键,无映射则保留原键 const targetKey = mapping[key] || key; // 递归处理嵌套的子对象/数组 result[targetKey] = convertKeyNames(obj[key], mapping); return result; }, {}); } // 非对象/数组类型直接返回原值 return obj; }
步骤3:使用转换后的对象操作Mongoose
const rawObject = JSON.parse(file_as_string); const formattedObject = convertKeyNames(rawObject, keyMapping); MyObject.findOneAndUpdate( { Uid: formattedObject.Uid }, formattedObject, { upsert: true, new: true } // upsert可选,根据需求决定是否新增文档 );
方法2:利用Mongoose字段别名/虚拟字段(ORM原生支持)
直接在Mongoose Schema中配置键名映射,让框架自动处理转换,更贴合Mongoose的使用习惯。
步骤1:修改Schema配置
为嵌套字段添加alias,顶层字段通过虚拟字段映射:
const UserSubSchema = new mongoose.Schema({ Firstname: { type: String, alias: 'Vorname' }, Lastname: { type: String, alias: 'Nachname' } }); const MainSchema = new mongoose.Schema({ Uid: Number, User: UserSubSchema }, { toJSON: { virtuals: true }, toObject: { virtuals: true } // 可选,序列化时保留别名字段 }); // 为顶层的Benutzer字段设置虚拟字段,映射到User MainSchema.virtual('Benutzer') .get(function() { return this.User; }) .set(function(value) { this.User = value; }); const MyObject = mongoose.model('MyObject', MainSchema);
步骤2:直接使用原始德语键对象操作Mongoose
此时Mongoose会自动识别德语别名,映射到对应的英文Schema字段:
const rawObject = JSON.parse(file_as_string); MyObject.findOneAndUpdate( { Uid: rawObject.Uid }, rawObject, { upsert: true, new: true } );
内容的提问来源于stack exchange,提问作者MeerArtefakt
相关产品推荐
相关产品推荐

