使用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的设计初衷是通过模型来操作集合,这种方式更符合其生态规范,也更易维护:
- 先定义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');
- 在连接函数中使用模型查询:
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
相关产品推荐
相关产品推荐

