mongodb的DAO层封装

作者: cd72c1240b33 | 来源:发表于2017-05-27 09:04 被阅读463次

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

    1.1 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('索引建立成功')
                }
            )
        })
    }
    

    1.2 插入数据--记得关闭数据库

    //插入数据
    exports.insertOne=function (collectionName,json,callback) {
        _connectDB(function (err,db) {
            //连接成功之后做的事情;
            db.collection(collectionName).insertOne(json,function (err,result) {//把插完后的结果,通过回调函数传出去
                callback(err,result);
                db.close();
            })
        })
    };
    

    1.3 查找数据

    //查找数据,找到所有需要的数据
    //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();
                }
            })
        })
    };
    

    1.4 删除数据

    //删除数据
    exports.deleteMany=function (collectionName,json,callback) {
        _connectDB(function (err,db) {
            db.collection(collectionName).deleteMany(json,function (err,results) {
                callback(err,results);
                db.close();
            })
        })
    };
    

    1.5 修改数据

    //修改数据;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();
            })
        })
    };
    

    1.6 得到总数量

    //得到总数量
    exports.getAllCount=function (collectionName,callback) {
        _connectDB(function (err,db) {
            db.collection(collectionName).count({}).then(function (count) {
                callback(count);
                db.close();
            })
    
        })
    }
    

    相关文章

      网友评论

      • 果而_b816:为什么在运行1.2插入数据时报错呢?TypeError: db.collection is not a function

      本文标题:mongodb的DAO层封装

      本文链接:https://www.haomeiwen.com/subject/rriffxtx.html