NestJS操作Mongo查询返回结果执行forEach时item为undefined求助
NestJS MongoDB遍历查询结果item为undefined的解决方法
核心原因:90%以上的情况是你拿到的allDB不是真正的JavaScript数组,而是Mongo客户端返回的游标/查询对象,这类对象控制台打印时会自动展开显示数据,但不支持标准的数组遍历方法,或遍历行为不符合预期。
排查&解决步骤
- 第一步:确认返回值类型
加一行日志确认allDB是否为标准数组:
如果输出为console.log(Array.isArray(allDB), allDB.length)false,就是返回值类型问题,按你使用的Mongo客户端修改findAll方法即可。 - 第二步:适配不同Mongo客户端的查询写法
- 如果你使用的是Mongoose ORM:
find()方法默认返回Mongoose Query对象,需显式调用.exec()转为标准Promise,确保返回的是文档数组:async findAll() { return this.db.find().exec() } - 如果你使用的是原生MongoDB Node.js驱动:
find()方法默认返回FindCursor游标对象,需调用.toArray()转为结果数组:async findAll() { return this.db.find().toArray() }
- 如果你使用的是Mongoose ORM:
- 第三步:兼容类数组对象特殊情况
如果确认需要保留原返回对象的结构,可以转成标准数组后再遍历:// 两种转数组的方式二选一即可 const allDBArray = Array.from(allDB) // 或 const allDBArray = [...allDB] allDBArray.forEach(item => { // 此处item即可正常获取 })
内容的提问来源于stack exchange,提问作者CarlosMagalhaes
相关产品推荐
相关产品推荐

