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

MongoDB中find返回空结果但findOne正常的问题求助

问题分析与解决

问题核心原因

findOne()会直接返回匹配的单个文档,而find()返回的是MongoDB游标对象,并非直接的结果数组。你直接对游标执行JSON.stringify(),得到空对象{}是因为游标本身可序列化的属性极少,无法直接输出结果集。

正确解决方案

需要调用游标对象的toArray()方法,将其转换为包含所有结果的数组:

exports = async function(){
  db = context.services.get("mongodb-atlas").db("2021_10_DB");
  const user_col = db.collection("Users");
  // 通过toArray()将游标转为结果数组
  alarmingSubjs = await user_col.find().toArray();
  console.log(JSON.stringify(alarmingSubjs));
  return "Done";
}

对尝试方法的补充说明

  • 移除async/await后,find()和findOne()都会返回未resolved的Promise对象,直接序列化自然得到空对象,必须通过async/await或.then()处理异步结果。
  • 回调函数方式需要配合toArray()使用,正确写法如下:
exports = function(){
  db = context.services.get("mongodb-atlas").db("2021_10_DB");
  const user_col = db.collection("Users");
  user_col.find().toArray(function(err, docs) {
    if(err) console.error(err);
    console.log(JSON.stringify(docs));
  });
  return "Done";
}
  • runCommand是数据库对象(db.runCommand(...))的方法,并非集合对象的方法,所以会出现TypeError,且这个方法也不是解决当前查询问题的必要选项。

内容的提问来源于stack exchange,提问作者Daniel Warfield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:01:05