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

版权声明:著作权归作者所有。

相关推荐

MongoDB使用MapReduce获取Collection所有的键

MongoDB作为一个文档数据库,它不像关系型数据那样有固定的schema。有时我们需要获取Collection集合里所用的键。使用MapReduce获取Collection的键keys= db.runCommand({   "mapreduce" : "test",   "ma