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

MongoDB find方法控制台查询正常但代码中无法返回预期结果

问题描述
  • 在MongoDB控制台执行db.Property.find({ customerCpf: 目标cpf值 })可正常查询到3条匹配文档
  • 业务代码中执行相同过滤条件的find查询无法得到预期结果,同场景下findOne方法可正常工作
  • 代码运行后控制台输出体积较大的内部对象,而非预期的匹配文档数据

控制台查询操作参考:
MongoDB控制台查询结果截图

关联代码

  1. 接口路由代码
app.get("/api/customer/:cpf", async (req, res) => {
  const properties = await Customer.consult(req);
  console.log(properties);
  res.status(200);
  res.end();
});
  1. 封装的查询方法代码
static async consult(req) {
    const conn = await client.connect();
    const db = conn.db("website");
    const cpf = req.params.cpf.toString();
    console.log(cpf);
    const properties = await db.collection("Property").find({
      customerCpf: cpf,
    });
    return properties;
  }
问题原因

MongoDB Node.js驱动中,find()方法不会直接返回匹配的文档集合,而是返回*Cursor(游标)*实例,你打印出的大体积对象就是游标实例,它内置了结果遍历、分页、排序等操作的内部属性和方法,并非最终的文档数据。
findOne()方法内部会自动消费游标、返回第一条匹配文档,因此可以直接拿到预期结果。

修复方案
  1. 对find()返回的游标调用toArray()方法,即可将所有匹配文档转为数组返回,修改后的查询方法如下:
static async consult(req) {
    const conn = await client.connect();
    const db = conn.db("website");
    const cpf = req.params.cpf.toString();
    console.log(cpf);
    // 调用toArray()消费游标,获取文档数组
    const properties = await db.collection("Property").find({
      customerCpf: cpf,
    }).toArray();
    return properties;
  }
  1. 现有路由代码仅返回了200状态码,未将查询结果写入响应,补充响应逻辑后接口才能正常返回数据,修改后的路由代码如下:
app.get("/api/customer/:cpf", async (req, res) => {
  const properties = await Customer.consult(req);
  console.log(properties);
  res.status(200).json(properties);
});

内容的提问来源于stack exchange,提问作者Matheus Fontana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:20