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:\test\node_modules\_mongodb@3.0.1@mongodb\lib\mongo_client.js:797
          throw err;
          ^

TypeError: db.collection is not a function
    at insertData (e:\test\insertdb.js:9:25)
    at e:\test\insertdb.js:25:5
    at args.push (e:\test\node_modules\_mongodb@3.0.1@mongodb\lib\utils.js:404:72)
    at e:\test\node_modules\_mongodb@3.0.1@mongodb\lib\mongo_client.js:255:5
    at connectCallback (e:\test\node_modules\_mongodb@3.0.1@mongodb\lib\mongo_client.js:933:5)
    at e:\test\node_modules\_mongodb@3.0.1@mongodb\lib\mongo_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();
    });
});

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM