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

使用mongoose连接MongoDB读取collection时触发TypeError,求技术支持

解决TypeError: Cannot read properties of undefined (reading 'collection')问题

问题根源

你调用mongoose.connect(mongoURI)时没有加await,这会导致代码在MongoDB连接还没建立完成的情况下,就去访问mongoose.connection.db,此时该对象还未初始化,自然会抛出读取collection属性的错误。

修复方案

方案1:给connect添加await,确保连接完成后再操作

修改后的代码:

const connectToMongo = async () => {
  try {
    mongoose.set('strictQuery', false);
    // 给connect添加await,等待连接建立完成
    await mongoose.connect(mongoURI);
    console.log('Mongo connected');
    const fetched_data = mongoose.connection.db.collection('book_desc');
    // 改用async/await替代回调,保持代码风格统一
    const data = await fetched_data.find({}).toArray();
    console.log(data);
  } catch (error) {
    console.log(error);
    process.exit();
  }
};

方案2:使用Mongoose模型(更推荐的方式)

Mongoose的设计初衷是通过模型来操作集合,这种方式更符合其生态规范,也更易维护:

  1. 先定义BookDesc模型:
const mongoose = require('mongoose');

const bookDescSchema = new mongoose.Schema({
  // 根据你的集合实际字段定义schema,示例:
  title: String,
  description: String
});

// 第三个参数指定关联的集合名称为book_desc
const BookDesc = mongoose.model('BookDesc', bookDescSchema, 'book_desc');
  1. 在连接函数中使用模型查询:
const connectToMongo = async () => {
  try {
    mongoose.set('strictQuery', false);
    await mongoose.connect(mongoURI);
    console.log('Mongo connected');
    // 使用模型查询全部数据
    const data = await BookDesc.find({});
    console.log(data);
  } catch (error) {
    console.log(error);
    process.exit();
  }
};

额外检查项

  • 确认mongoURI是正确的MongoDB连接字符串,包含目标数据库名称、账号密码(若需认证)等信息。
  • 本地MongoDB需确认服务已启动;云MongoDB需确认网络权限开放、账号配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:32:31