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();
});
});