nodejs运行项目报错TypeError: db.collection is not a function

nodejs调用mongodb驱动写入数据异常

nodejs 版本:v8.9.4
mongodb 版本:3.4.7

问题描述:

使用nodejs,连接mongodb,数据写入时提示如下错误:

$ node insertdb.js
连接成功![object Object]
e:	est
ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:797
          throw err;
          ^

TypeError: db.collection is not a function
    at insertData (e:	estinsertdb.js:9:25)
    at e:	estinsertdb.js:25:5
    at args.push (e:	est
ode_modules\_mongodb@3.0.1@mongodblibutils.js:404:72)
    at e:	est
ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:255:5
    at connectCallback (e:	est
ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:933:5)
    at e:	est
ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:794:11
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

问题分析:

1、根据错误提示:TypeError: collection is not a function 说明函数:collection未找到。
2、从错误堆栈中,定位到node的lib目录,结构如下:
这里写图片描述
3、错误堆栈中,仅定位到 mongo_client.js,还没有到数据库一级就出现异常了。
4、打开文件collection.js,搜索collection方法,找到如下代码示例片段,原来mongodb 3.x版本的库文件与2.x版本的不一样,按照示例修改就可以了:
这里写图片描述

示例代码:

// mongodb 
// 插入数据
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:30000/runoob';
var dbName = 'runnoob';

var insertData = function(db, callback) {  
    //连接到表 site
    var collection = db.collection('site');
    //插入数据
    var data = [{"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"}];
    collection.insert(data, function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }     
        callback(result);
    });
}

/*连接方式1:错误
MongoClient.connect(url, function(err, db) {
    console.log("连接成功!" + db);
    insertData(db, function(result) {
        console.log(result);
        db.close();
    });
});
*/

/* 连接方式2:正确*/
MongoClient.connect(url, function(err, client) {
    console.log("连接成功!" + client);
	var db = client.db(dbName)
    insertData(db, function(result) {
        console.log(result);
        client.close();
    });
});

 
原文地址:https://www.cnblogs.com/qianzf/p/14235604.html