You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js调用MongoDB find()返回拓扑对象而非用户文档问题

问题根因

MongoDB Node.js 驱动中,collection.find() 方法不会直接返回匹配的文档集合,其返回值是一个游标(Cursor)对象。该游标继承自Node.js的EventEmitter类,自带_events、_eventsCount等内部事件属性。你直接将游标对象传入res.json()做序列化,最终输出的就是这些内部属性,而非实际查询到的用户数据。
mongosh中find()可以直接返回结果,是因为shell环境对返回的游标做了自动迭代转换,和Node.js驱动的默认行为不一致。

修复方法

在find()返回的游标后链式调用.toArray()方法,等待游标拉取所有匹配文档、转换为标准JavaScript数组后,再作为响应返回。
修正后的接口代码:

import { connectToDatabase } from "../../src/util/mongodb";

export default async function buildUser(req, res){
  const { db } = await connectToDatabase();
  // 调用toArray()获取实际文档数组
  const users = await db.collection("users").find().toArray();
  res.status(200).json(users)
}
注意事项
  • 若users集合数据量较大,不建议直接使用无参数的find().toArray()拉取全量数据,建议搭配limit()、skip()做分页查询,避免接口响应过慢、服务内存占用过高。
  • 你当前实现的connectToDatabase数据库连接缓存逻辑没有问题,不需要调整。

内容的提问来源于stack exchange,提问作者Owen Winzeler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:27:24