以往我们用Node.js操作MongoDB数据库如下:
Node.js 查找 MongoDb 数据库集合:
MongoClient .connect( dbUrl ,function(err,db){
if(err){ /* 数据库连接失败 */
console .log('数据库连接失败');
return;
}
var result=[];
var userRel=db.collection('user').find();
//res.send(userRel);
userRel.each(function(err, doc) {
if(err){
res.write("游标遍历错误");
return;
}
if (doc != null) {
result.push(doc);
} else {
console .log(result);
// 遍历完毕
db.close();
res.render("index",{
"result" : result
});
}
});
})
Node.js 给 MongoDb 增加数据 :
MongoClient .connect( dbUrl ,function(err,db){
if(err){
return
}
db.collection('user').insertOne({
"name" : name,
"age" : age,
"score" : {
"shuxue" : shuxuechengji,
"yuwen" : yuwenchengji
}
},function(err,result){
if(err){
console .log('写入数据失败');
}
// 关闭数据库
db.close();
//res.redirect('/add');
res.redirect('/'); /* 路由跳转 */
res.end(); res.location('/add')
})
})
Node.js 修改 MongoDb 数据 :
MongoClient .connect( dbUrl ,function(err,db){
if(err){
console .log('数据库连接错误');
return;
}
db.collection('user').updateOne({"_id": ObjectID (id)},
{
"name": name,
"age": age,
"score": {
"shuxue": shuxue,
"yuwen": yuwen
}
},function (err, results) {
console .log(results);
db.close();
res.redirect('/'); /* 路由跳转 */
res.end('end');
})
})
Node.js 删除 MongoDb 数据:
MongoClient .connect( dbUrl ,function(err,db){
if(err){
throw new Error("数据库连接失败");
return;
}
db.collection('user').deleteOne({"_id": ObjectID (id)},function(error,result){
if(error){
throw new Error('删除数据失败');
return;
}
db.close();
res.redirect('/'); /* 路由跳转 */
})
})
我们可以发现不管在操作增删改查都需要连接一次数据库,造成有大量重复的代码,接下来我们要对这些操作进行封装,封装成简单的几个方法。
我们可以发现我们操作数据库进行增删改查都是先连接数据库然后在进行对应的增删改查操作,所以首先我们把MongoBD数据库连接抽取出来:
var MongoClient=require('mongodb').MongoClient;
var DbUrl='mongodb://localhost:27017/test'; /*连接数据库*/
function __connectDb(callback){
MongoClient.connect(DbUrl,function(err,db){
if(err){
console.log('数据库连接失败');
return;
}
//增加 修改 删除
callback(db);
})
}
我们把连接数据库的部分抽取出来了,不同的只是连接数据库之后操作的需求是不一样的,有可能是增加或者修改、删除、查找。所以我们给我们的__connectDb方法传入一个callback方法,这个callback就是对应我们的增加、修改、删除、查找操作,等待MongoClient.connect连接完成之后进行回调我们的callback方法即可。
接下来我们分别对我们的增删改查操作进行实现:
查找方法的实现:
exports.find=function(collectionname,json,callback){
__connectDb(function(db){
var result=db.collection(collectionname).find(json);
result.toArray(function(error,data){
db.close();/*关闭数据库连接*/
callback(error,data);/*拿到数据执行回调函数*/
})
})
}
增加方法的实现:
//增加数据
exports.insert=function(collectionname,json,callback){
__connectDb(function(db){
db.collection(collectionname).insertOne(json,function(error,data){
callback(error,data);
})
})
}
修改方法的实现:
//修改数据
exports.update=function(collectionname,json1,json2,callback){
__connectDb(function(db){
db.collection(collectionname).updateOne(json1,{$set:json2},function(error,data){
callback(error,data);
})
})
}
删除方法的实现:
//删除数据
exports.deleteOne=function(collectionname,json,callback){
__connectDb(function(db){
db.collection(collectionname).deleteOne(json,function(error,data){
callback(error,data);
})
})
}
这样就完成我们一个简单的MongoDB操作库。