在models下创建 db.js
- 配合express路由,在操作数据的增删改查的过程中,来进行mongodb的DAO层封装
这个模块封装了所有对数据库的常用操作;
1.0 连接数据库
- 导出连接数据库的地址;这里涉及了数据库的创建(luntan就是数据库)
//导出数据库地址;它是可变的,所以,单独写一个模块
module.exports={
"dburl":'mongodb://localhost:27017/luntan'
}
//不管数据库的什么操作,都要先连接数据库,所以,我们可以把连接数据库封装成内部函数
var MongoClient=require('mongodb').MongoClient;
var settings=require('../setting');
//连接数据库
function _connectDB(callback) {
var url=settings.dburl;//从settings文件中读数据库地址;
MongoClient.connect(url,function (err,db) {
console.log('连接成功了');
if(err){
callback(err,null);
return;
}
callback(err,db);
})
}
init对数据库进行初始化
//init对数据库进行初始化;
init();
function init() {
_connectDB(function (err,db) {
if(err){
console.log(err);
return;
}
db.collection('users').createIndex(
{"username":1},
null,
function (err,results) {
if(err){
console.log(err);
return;
}
console.log('索引建立成功')
}
)
})
}
插入数据--记得关闭数据库
//插入数据
exports.insertOne=function (collectionName,json,callback) {
_connectDB(function (err,db) {
//连接成功之后做的事情;
db.collection(collectionName).insertOne(json,function (err,result) {//把插完后的结果,通过回调函数传出去
callback(err,result);
db.close();
})
})
};
查找数据
//查找数据,找到所有需要的数据
//args中涉及:1)分页 2)排序
exports.find=function (collectionName,json,args,callback) {
if(arguments.length==3){
callback=args;
args={"page":0,"pageamount":0}
}
var result=[];//结果数组;
var skip=args.page*args.pageamount;//第几页
var limit=Number(args.pageamount);//每页多少条
var sort=args.sort||{};
_connectDB(function (err,db) {
var cursor=db.collection(collectionName).find(json).limit(limit).skip(skip).sort(sort);
cursor.each(function (err,doc) {
if(err){
callback(err,null);
return;
}
if(doc != null){
result.push(doc);
}else{
//遍历结束,没有更多的文档了
callback(null,result);
db.close();
}
})
})
};
删除数据
//删除数据
exports.deleteMany=function (collectionName,json,callback) {
_connectDB(function (err,db) {
db.collection(collectionName).deleteMany(json,function (err,results) {
callback(err,results);
db.close();
})
})
};
修改数据
//修改数据;json2涉及一些操作符
exports.updateMany=function (collectionName,json1,json2,callback) {
_connectDB(function (err,db) {
db.collection(collectionName).updateMany(json1,json2,function (err,results) {
callback(err,results);
db.close();
})
})
};
得到总数量
//得到总数量
exports.getAllCount=function (collectionName,callback) {
_connectDB(function (err,db) {
db.collection(collectionName).count({}).then(function (count) {
callback(count);
db.close();
})
})
}