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

MERN Stack项目中toArray函数失效,查询返回空列表求助

问题排查与解决方案

以下是导致你获取food_items集合数据为空的常见原因及对应解决步骤:

1. 数据库/集合名称不匹配

  • 你的MongoDB连接URI中没有指定目标数据库,Mongoose会默认使用test数据库。请确认:
    • Atlas控制台中,你的food_items集合是否存在于test数据库下?
    • 如果集合在其他数据库(比如foodDB),修改连接URI,在末尾添加数据库名:
      const mongoURI = 'mongodb://<username>:<password>@ac-czejupk-shard-00-00.e8wdets.mongodb.net:27017/foodDB?ssl=true&replicaSet=atlas-11o3y9-shard-0&authSource=admin&retryWrites=true&w=majority'
      
    • 或者在mongoose.connect中通过dbName选项指定:
      await mongoose.connect(mongoURI, { useNewUrlParser: true, dbName: "foodDB" })
      

2. 异步代码混用回调与async/await导致的问题

你的代码同时混用了await和回调函数,可能引发异步执行顺序问题。建议统一使用async/await写法,避免嵌套回调:

const mongoose = require('mongoose');
const mongoURI = 'mongodb://<username>:<password>@ac-czejupk-shard-00-00.e8wdets.mongodb.net:27017/foodDB?ssl=true&replicaSet=atlas-11o3y9-shard-0&authSource=admin&retryWrites=true&w=majority'

const mongoDB = async () => {
  try {
    await mongoose.connect(mongoURI, { useNewUrlParser: true, dbName: "foodDB" });
    console.log("connected");
    
    const db = mongoose.connection.db;
    const fetched_data = db.collection("food_items");
    const data = await fetched_data.find({}).toArray();
    
    global.food_items = data;
    console.log(global.food_items);
  } catch (err) {
    console.log("---", err);
  }
}

module.exports = mongoDB;

3. 数据库用户权限不足

  • 登录MongoDB Atlas控制台,进入Database Access页面,检查你的数据库用户是否拥有read或readWrite权限。
  • 如果用户仅具备read权限,确认集合是否允许读取;如果权限不够,修改用户角色为readWrite。

4. 集合本身无数据

  • 直接在Atlas控制台的Collections页面查看food_items集合,确认其中是否存在文档。如果集合为空,自然返回空数组。

5. 依赖版本冲突

你的package.json中同时安装了mongodb@2.2.12(旧版本)和mongoose@6.6.1,两者的驱动可能存在兼容性问题:

  • 卸载mongodb和mongodb-legacy,因为Mongoose自带MongoDB驱动,无需单独安装:
    npm uninstall mongodb mongodb-legacy
    
  • 确保Mongoose版本与Node.js版本兼容(Mongoose 6.x支持Node.js 12.0.0+)。

内容的提问来源于stack exchange,提问作者Apurva Muthaye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:44