Node.js连接MongoDB成功后无法访问集合的问题求助
Node.js连接MongoDB后访问集合的问题解决
错误原因分析
- 异步执行顺序问题:
MongoClient.connect是异步操作,你在连接回调外直接访问db变量时,连接还未完成,db仍为undefined,这是触发Cannot read properties of undefined (reading 'Collection')报错的核心原因。 - 方法名大小写错误:MongoDB获取集合的方法是小写的
collection(),而非大写的Collection()。
修正后的代码
回调函数版本
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost:27017/test'; MongoClient.connect(url, function (err, database) { if (err) { console.error('MongoDB 연결 실패', err); return; } console.log("DB연결 성공"); // 必须在连接成功的回调内操作集合 var movies = database.collection('test'); // 示例:插入单条数据 movies.insertOne({ title: "测试电影" }, function (insertErr, result) { if (insertErr) { console.error('插入失败', insertErr); return; } console.log('插入成功,文档ID:', result.insertedId); // 操作完成后按需关闭连接 database.close(); }); });
Async/Await版本(推荐,更简洁)
如果你的Node.js版本支持ES6+语法,建议使用async/await写法避免回调嵌套:
const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017/test'; async function main() { let database; try { // 等待连接完成 database = await MongoClient.connect(url); console.log("DB연결 성공"); // 获取集合 const movies = database.collection('test'); // 插入示例数据 const result = await movies.insertOne({ title: "测试电影" }); console.log('插入成功,文档ID:', result.insertedId); } catch (err) { console.error('操作失败', err); } finally { // 确保连接被关闭,避免资源泄漏 if (database) { await database.close(); } } } main();
核心注意事项
- 所有数据库操作必须放在连接成功的回调函数内,或通过async/await确保连接完成后再执行。
- 严格区分MongoDB API的方法大小写,集合获取方法是
collection()(小写c)。 - 操作完成后按需关闭数据库连接,避免长期占用资源。
内容的提问来源于stack exchange,提问作者BrianLEE
相关产品推荐
相关产品推荐

