如何不使用for循环合并JavaScript数组,处理mongoose返回的嵌套数组结果
实现方案
你可以选择应用层快速处理,或者直接在Mongoose查询阶段聚合得到目标结果,两种方法都不需要手写显式循环:
方案1:应用层处理(无需修改查询逻辑)
使用JS内置的flatMap方法(ES2019及以上支持),该方法底层做了性能优化,远快于手动写forEach循环:
// 假设mongoose查询返回的结果存在res变量中 const targetArr = res.store.flatMap(item => item.items)
如果运行环境不支持flatMap,可以用reduce替代:
const targetArr = res.store.reduce((acc, curr) => acc.concat(curr.items), [])
方案2:Mongoose聚合查询(更适合大数据量场景)
直接在查询阶段通过聚合管道得到目标数组,无需后续应用层处理,性能更高:
YourModel.aggregate([ // 拆分store数组为单条文档 { $unwind: "$store" }, // 拆分每个store下的items数组为单条文档 { $unwind: "$store.items" }, // 把所有items值聚合为一个数组 { $group: { _id: null, result: { $push: "$store.items" } } }, // 移除不需要的_id字段 { $project: { _id: 0 } } ])
查询返回的结果中result字段就是你需要的目标数组。
内容的提问来源于stack exchange,提问作者Mostafa
相关产品推荐
相关产品推荐

