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的标准用法,便于后续扩展数据校验、中间件等功能:
- 先定义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');
- 修改查询逻辑:
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
相关产品推荐
相关产品推荐

