MongoDB与Node.js结合报错:TypeError: db.collection is not a function 求助
解决TypeError: db.collection is not a function的问题
这个问题我之前调试代码时也踩过坑,根源是MongoDB Node.js驱动版本的差异,具体来说:
- 在MongoDB驱动3.0及以上版本中,
MongoClient.connect的回调函数第二个参数不再直接返回数据库实例,而是返回一个MongoClient客户端对象。你现在的代码是按照2.x旧版本的写法编写的,自然会找不到collection方法,从而抛出这个错误。
修正后的代码
你只需要调整回调里的逻辑,先通过客户端对象获取目标数据库,再调用collection方法,同时记得操作完成后关闭客户端连接:
var MongoClient = require('mongodb').MongoClient; var url = "mongodb://abc:12345**@xxxx.mlab.com:&&&&/myDB"; MongoClient.connect(url, function(err, client) { if(err) { console.log(err); return; } console.log("Database created!"); // 获取指定数据库实例 const db = client.db('myDB'); db.collection('users').aggregate([ { '$match': { 'organization.organizationId': "e1716c62-fdce-11e7-8be5-0ed5f89f718b" } }, { "$project": { "deviceDetails": 1, "userDetails": 1 } } ], function(error, documents) { if (error) { console.error(error); } else { console.log(documents); } // 操作完成后关闭客户端连接 client.close(); }); });
额外提示
如果你的项目依赖的是旧版本驱动(2.x),也可以继续用原来的写法,但更建议升级到最新稳定版,同时改用异步/await的写法让代码更易读:
const MongoClient = require('mongodb').MongoClient; const url = "mongodb://abc:12345**@xxxx.mlab.com:&&&&/myDB"; async function run() { let client; try { client = await MongoClient.connect(url); console.log("Database created!"); const db = client.db('myDB'); const documents = await db.collection('users').aggregate([ { '$match': { 'organization.organizationId': "e1716c62-fdce-11e7-8be5-0ed5f89f718b" } }, { "$project": { "deviceDetails": 1, "userDetails": 1 } } ]).toArray(); console.log(documents); } catch (err) { console.error(err); } finally { if (client) { await client.close(); } } } run();
内容的提问来源于stack exchange,提问作者Rahul Saini
相关产品推荐
相关产品推荐

