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

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

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…git

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

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

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,更新一下就能够了。express

相关文章
相关标签/搜索