mongodb的DAO层封装

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

    })
}

你可能感兴趣的:(mongodb的DAO层封装)