Mongoose Populate嵌套查询后如何过滤无sections的subsystems项
原有实现的问题
你写的过滤代码存在2个核心错误:
- Mongoose返回的
systems是数组类型,你直接读取systems.subsystems会得到undefined,运行时会直接抛出长度读取错误 - forEach循环没有返回值,你在循环内部的return语句不会把test数组传递到外部,且通过index赋值的方式会导致test数组出现大量undefined空占位项,无法得到正确的过滤结果
正确过滤方案
你只需要在exec回调的返回结果前,对数据做两层遍历处理即可,核心用JS原生的map+filter方法实现,代码更简洁可靠:
.exec((error, systems) => { if (error) { // 可自行补充错误处理逻辑 return res.status(500).json({success: false, message: '数据查询失败'}); } // 核心过滤逻辑 const processedSystems = systems.map(systemItem => { // 先把Mongoose文档对象转成普通JS对象,方便属性操作 const plainSystem = systemItem.toObject(); // 过滤掉sections为空的subsystem plainSystem.subsystems = plainSystem.subsystems.filter(subsystem => { return subsystem.sections.length > 0; }); return plainSystem; }); // 如果你还需要过滤掉subsystems全为空的system项,可放开下面的注释 // processedSystems = processedSystems.filter(system => system.subsystems.length > 0); return res.status(200).json({ data: processedSystems, success: true }); });
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

