在nodejs操作mongodb显示数据库连接成功之后突然报了db.collection is not a function错误,引起这个错误的原因是你monodb库的版本和你nodejs操作数据的api版本不一致。那么解决这种问题的方法有两种,首先先看看代码:
解决办法一:
/**
* Created by lenovoo on 2018/1/23.
*/
var express = require("express");
var MongoClient = require("mongodb").MongoClient;
var app = express();
app.get("/",function(req,res) {
//连接数据库
//假如数据库不存在,会自动创建一个数据库
var url = "mongodb://localhost:27017/mongoTest";
MongoClient.connect(url, function (err, db) {
//db参数就是连接成功之后的数据库实体
if (err) {
console.log("数据库连接失败");
return;
}
console.log("数据库连接成功");
//2.x老版本写法
var user = db.collection("user");
user.insertOne({
"username": "jmin",
"age": 22,
"sex": "男"
}, function (err, result) {
if (err) {
res.send("插入数据失败");
return;
}
db.close();
res.end();
});
});
});
app.listen(3000);
一开始我是以这种写法来向数据库插入一条数据,
此时就报错了,来看看我的package.json中mongodb版本:
"devDependencies": {
"ejs": "^2.5.7",
"express": "^4.16.2",
"formidable": "^1.1.1",
"mongodb": "^3.0.1",
"silly-datetime": "^0.1.2"
}
npm自动下载了最新版本3.0的库,而3.0中的写法跟2.x写法已经不一样了,so..........
附上3.0api:http://mongodb.github.io/node-mongodb-native/3.0/api/
那么此时你只需要下载
"mongodb": "^2.2.33",
即可使用(版本回退)。
解决方法二:
那么如果你要使用3.0版本的mongodb库,那么你就得用新的写法了。
/**
* Created by lenovoo on 2018/1/23.
*/
var express = require("express");
var MongoClient = require("mongodb").MongoClient;
var app = express();
app.get("/",function(req,res) {
//连接数据库
//假如数据库不存在,会自动创建一个数据库
var url = "mongodb://localhost:27017/mongoTest";
MongoClient.connect(url, function (err, client) {
//client参数就是连接成功之后的mongoclient(个人理解为数据库客户端)
if (err) {
console.log("数据库连接失败");
return;
}
console.log("数据库连接成功");
//3.0新写法
var db = client.db("mongoTest");
db.collection("user").insertOne({
"username": "jmin呀",
"age": 23,
"sex": "男"
}, function (err, result) {
if (err) {
res.send("插入数据失败");
return;
}
db.close();
res.end();
})
});
});
app.listen(3000);
此时就可以正常插入数据了: