JS中如何扁平化MongoDB返回的JSON数组并移除_id字段?
高效扁平化MongoDB返回的嵌套JSON数组方案
如果想要高效处理这类嵌套结构,优先推荐在MongoDB查询阶段直接转换格式,避免客户端额外处理;如果必须在客户端处理,Lodash或原生JS的内置方法都能实现高效转换。
1. 数据库端直接处理(最优方案)
在聚合查询阶段用$project直接提取嵌套字段并移除_id,数据库返回的结果就是目标结构,减少数据传输和客户端计算:
db.collection.aggregate([ { $project: { fx_capacity_category: "$_id.fx_capacity_category", fx_capacity: 1, _id: 0 // 移除原始_id字段 } } ])
2. Lodash客户端实现
用_.map配合对象展开或_.assign,简洁且高效:
// 方式1:对象展开运算符 const flattened = _.map(originalArray, item => ({ ...item._id, fx_capacity: item.fx_capacity })); // 方式2:Lodash的assign方法 const flattened = _.map(originalArray, item => _.assign({}, item._id, { fx_capacity: item.fx_capacity }) );
Lodash的_.map内部做了性能优化,比手动for循环更稳定可靠。
3. 原生JS高效实现
原生Array.map是引擎优化的内置方法,性能不输手动遍历,写法更简洁:
// 方式1:直接解构字段 const flattened = originalArray.map(item => ({ fx_capacity_category: item._id.fx_capacity_category, fx_capacity: item.fx_capacity })); // 方式2:对象展开运算符 const flattened = originalArray.map(item => ({ ...item._id, fx_capacity: item.fx_capacity }));
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

