node-mongodb-native 3.0报错:TypeError: db.collection is not a function
MongoDB NodeJS驱动升级到3.0后报错:
TypeError: db.collection is not a function
at d:\workspace\service.JS:88:16
at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72)
at d:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5
at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5)
at d:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11
这个主要原因是node-mongodb-native 3.0的api做了修改,具体可以查看changelog。
其中Db.prototype.db迁移到了MongoClient.prototype.db。
原来使用Db构建需要修改为MongoClient。
Db => MongoClient
旧的构建Db
var db = var Db('test', new Server('localhost', 27017));
db.open((err, db) => {
db.admin().authenticate('root', 'root', (err, success) => {
....
});
});
需要替换为
new MongoClient(new Server('localhost', 27017), {
user: 'root'
, password: 'root'
, authSource: 'adming'}).connect((err, client) => {
....
})
MongoClient.connect
使用MongoClient.connect连接的回调函数传入的参数db改为client
旧的connect
MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
// 原来传入的是db实例
});
修改为
MongoClient.connect('mongodb://localhost:27017/test', (err, client) => {
// 回调函数传入的是MongolianClient的实例
var db = client.db('mytestingdb');
});
另外原来在Db的logout和close方法也迁移到了MongoClient。关闭连接需要改为
MongoClient.connect('mongodb://localhost', function (err, client) {
if (err) throw err;
var db = client.db('mytestingdb');
db.collection('customers').findOne({}, function (findErr, result) {
if (findErr) throw findErr;
console.log(result.name);
client.close(); //close迁移到了MongonClient
});
});
解决方法
TypeError: db.collection is not a function
此错误有两种方法:
方法一
使用node-mongodb-native 3.0,安装上面的方法迁移升级代码。
方法二
把node-mongodb-native版降级为2.2.33。
npm install mongodb@2.2.33 --save