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

MongoDB连接报错:TypeError无法读取undefined的'db'属性求助

解决MongoDB连接后读取数据报错:TypeError: Cannot read properties of undefined (reading 'db')

错误原因

报错根源在这行代码:const fetched_data = await mongoose.collection.db.collection("guideInfo");
mongoose对象本身没有collection属性,mongoose.collection的值是undefined,尝试读取它的db属性自然会抛出类型错误。


解决方案

方案一:通过mongoose.connection获取数据库实例

连接成功后,mongoose的连接实例存在mongoose.connection上,通过它的db属性可以拿到MongoDB原生数据库对象,再获取目标集合:

const mongoDB = async () => {
    try {
        await mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true });
        console.log('Connected to MongoDB');
        // 正确获取数据库实例
        const db = mongoose.connection.db;
        const fetched_data = db.collection("guideInfo");
        // 改用await替代回调,保持async/await风格一致
        const data = await fetched_data.find({}).toArray();
        console.log(data);
    } catch (error) {
        console.error('Error connecting to MongoDB:', error);
    }
};

module.exports = mongoDB;

方案二:使用Mongoose Model(推荐)

Mongoose的核心是Schema和Model,这是Mongoose的标准用法,便于后续扩展数据校验、中间件等功能:

  1. 先定义Schema和Model:
const mongoose = require('mongoose');

// 根据你的数据结构定义字段
const guideInfoSchema = new mongoose.Schema({
    name: String,
    description: String
    // 其他字段按需添加
});

// 创建Model,第三个参数指定集合名(不指定的话Mongoose会自动把Model名转复数作为集合名)
const GuideInfo = mongoose.model('GuideInfo', guideInfoSchema, 'guideInfo');
  1. 修改查询逻辑:
const mongoDB = async () => {
    try {
        await mongoose.connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true });
        console.log('Connected to MongoDB');
        // 使用Model查询所有数据
        const data = await GuideInfo.find({});
        console.log(data);
    } catch (error) {
        console.error('Error connecting to MongoDB:', error);
    }
};

module.exports = mongoDB;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:42:45