MongoDB 2.2.3下TypeError: db.collection未定义问题求助
TypeError: db.collection is not defined in MongoDB 2.2.3 with Node.js
我完全理解你翻遍现有答案仍卡在这里的 frustration——核心问题出在你使用的MongoDB Node.js驱动2.2.3版本的API差异上,这个旧版本的回调返回逻辑和新版本完全不一样!
在你当前的驱动版本里,MongoClient.connect回调里拿到的db对象并不是直接可操作的数据库实例,而是一个包含数据库连接的客户端对象。你必须先从中获取具体的数据库实例,才能调用collection方法。
解决方案:修改数据库连接逻辑
直接修改config.js里的connectdb函数,在resolve之前先获取目标数据库:
let MongoClient = require('mongodb').MongoClient; require('dotenv').config(); function connectdb() { return new Promise((resolve,reject)=> { // 把回调参数名改成client更贴合实际,避免混淆 MongoClient.connect(process.env.url,function(err, client) { if (err){ reject("database connection error"); } else { // 从客户端对象中获取你要操作的数据库实例 // 这里可直接写数据库名,或者从.env里配置dbName变量 const targetDb = client.db(process.env.dbName); resolve(targetDb); } }); }); } exports.connectdb=connectdb;
配套调整:完善.env配置
在.env文件里添加数据库名称的配置,示例:
url=mongodb://localhost:27017 dbName=你的数据库名称 collection=students
为什么之前的代码不行?
MongoDB驱动3.x及以后版本中,MongoClient.connect的回调直接返回数据库实例,但2.x版本里返回的是客户端连接对象——这就是为什么你明明能看到传入了db对象,却调用不了collection的原因。
测试验证
修改完成后重启你的Node.js服务,访问根路由/,应该就能正常查询到集合数据,不会再触发TypeError了。
内容的提问来源于stack exchange,提问作者anurag vitta
相关产品推荐
相关产品推荐

