nodejs操作mongoDB时出现db.collection is not a function的解决方法

Posted on 2018-02-01 11:27  一栈  阅读(1449)  评论(0)    收藏  举报

刚开始在使用nodejs操作mongoDB进行插入数据时的代码如下:

var MongoClient = require('mongodb').MongoClient;
var DB_URL = 'mongodb://127.0.0.1:27017/test';
var insertData = function (db, callback) { //连接到表 site var collection = db.collection('site'); //插入数据 var data = {"name":"node","age":18,"addr":"nb","addTime":new Date()}; collection.insert(data, function (err, result) { if (err) { console.log('Error:' + err); return; } callback(result); }); } MongoClient.connect(DB_URL, function (err, db) { if (err) { console.log(err); return; } console.log("连接成功!"); insertData(db, function (result) { console.log(result); db.close(); }); });

结果报错了:db.collection is not a function…

在网上查询了一下,发现这是mongoDB版本问题所导致的,上面的写法是2.x版本的,而我使用的是3.x版,写法上有变化,有两种解决方法:一是将mongoDB回退到2.x版本,二是使用3.x版本的写法。

下面是我参考 https://www.jianshu.com/p/6883615640f0 后亲测成功的3.x版本的写法:

var MongoClient = require('mongodb').MongoClient;
var DB_URL = 'mongodb://127.0.0.1:27017/test';

function insertData(db,callback){
    //在mongoDB里查询show dbs会出现person
    var person = db.db('person');
    //在person里查询show tables会出现student
    var student = person.collection('student');
    var tmp1 = {"name":"node","age":18,"addr":"nb","addTime":new Date()};
    student.insert(tmp1,{safe:true},function(err, result){
        if(err){
            console.log("插入失败:",err);
            return;
        }
        console.log("插入成功");
        callback(result);
    }); 
}

MongoClient.connect(DB_URL, function(error, db){
    if(error){
        console.log("连接失败:",error);
        return;
    }
    console.log('连接成功!');
    insertData(db,function(result){
        console.log(result);
        db.close();
    });
});

还有一种3.x版本的写法,和官网上(http://mongodb.github.io/node-mongodb-native/3.0/api/)的写法相似,不过自己没试过,也贴出来参考吧

// 3.0 以上 高版本语法  
  
const express = require('express');  
const router = express.Router();  
const mongoClient = require('mongodb').MongoClient;  
const assert = require('assert');  
mongoClient.connect("数据库地址", function(err, client) { assert.equal(null, err);  
  
// admin 为 数据库名称;  
const db = client.db("admin");  
// PASS 为 数据库里面的某一个集合;  
const pass = db.collection('PASS');  
  
pass.find({}).toArray(function(err, docs) {  
  
assert.equal(err, null);  
  
console.log(docs);  
});  
  
});  
  
module.exports = router;  

另外一种回退到2.x版本的解决方法比较简单,只需要找到package.json文件,将里面的修改为:"mongodb": "^2.3.33",然后打开命令行: npm install,更新一下就可以了。