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
 
             
             
             
             
            