Node下一个简单好用的 MongoDB 操作模块

数据库操作总要伴随着繁复的连接操作,所以简单的封装了一下,使用起来还是比较简单好用的,需要先安装 mongodb 模块。

好消息:本轮子已加入 npm → promise-mongodb (后来我发现有个现成的非常强大的库 mongoose,我自己瞎写的小破轮子就忽略吧哈哈哈)

使用 Promise

/**
 * Update by 喻建博 on 2017/7/29.
 * http://blog.csdn.net/zmhawk/article/details/74379470
 */

//  mangoDB 数据库模块
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = null;


/**
 * 数据库连接函数
 * @param collectionName    集合的名字
 */
function connect(collectionName) {
    return new Promise((resolve, reject) => {
        MongoClient.connect(DB_CONN_STR, function (err, db) {
            console.log("连接成功!");
            //连接到表
            var collection = db.collection(collectionName);
            resolve({collection, db});
        });
    })
}

/**
 *
 * @param op 操作的名字
 * @returns {Function}
 */
function operation(op) {
    /**
     * @param collectionName 要操作的 collection 的名字
     * @param data1 第一组参数,根据操作不同含义不同
     * @param data2 第二组参数,根据操作不同含义不同
     */
    return function (collectionName, data1, data2) {
        return new Promise((resolve, reject) => {
            connect(collectionName).then(({ collection, db }) => {
                switch (op) {
                    case 'insert': {
                        //  data1 为要插入的数据
                        collection.insert(data1, returnResult)
                        break;
                    }
                    case 'update': {
                        //  data1 为查询参数
                        //  data2 为修改参数
                        collection.update(data1, data2, returnResult)
                        break;
                    }
                    case 'find': {
                        //  data1 为查询参数
                        collection.find(data1).toArray(returnResult)
                        break;
                    }
                    case 'remove': {
                        // 为查询参数
                        collection.remove(data1, returnResult)
                        break;
                    }
                }
                function returnResult(err, result) {
                    if (err) {
                        reject(err);
                        return;
                    }
                    resolve(result);
                    db.close();
                }
            })
        })
    }
}

/**
 * 初始化方法
 * @param str    //   数据库连接的字符串
 */
function init(str) {
    DB_CONN_STR = str;
}

/**
 *
 * @module
 */
module.exports = {
    insert: operation('insert'),
    find: operation('find'),
    update: operation('update'),
    remove: operation('remove'),
    init: init,
    getCollection: connect  //   获取数据库连接,方便自定义复杂的查询操作
};

使用方法举例:

var mongodb = require('./mongo');
mongodb.init('mongodb://localhost:27017/test');

mongodb.insert('user', {username: "嘿嘿嘿354435243", password: "123456"}).then((data) => {
    console.log(data)
}, (err) => {
    console.log(err)
});

mongodb.update('user', {username: "嘿嘿嘿354435243"}, {$set: {username: "我改了", password: "123456"}}).then((data) => {
    console.log(data)
}, (err) => {
    console.log(err)
});

mongodb.find('user', {username: "嘿嘿嘿"}).then((data) => {
    console.log(data)
}, (err) => {
    console.log(err)
});

mongodb.remove('user', {username: "嘿嘿嘿22222"}).then((data) => {
    console.log(data)
}, (err) => {
    console.log(err)
});

上面是更新后的代码,更简洁。

下面是之前的代码,纯回调。

/**
 * Created by 喻建博 on 2017/7/4.
 * http://blog.csdn.net/zmhawk/article/details/74379470
 */

//  mangoDB 数据库模块
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = null;

/**
 * 数据库连接函数
 * @param collectionName    集合的名字
 * @param callback      连接成功后的回调函数
 */
function connect(collectionName, callback) {
    MongoClient.connect(DB_CONN_STR, function (err, db) {
        // console.log("连接成功!");
        //连接到表
        var collection = db.collection(collectionName);
        callback(collection, db);
    });
}

/**
 * 插入文档的方法
 * @param collectionName {String}   //  集合的名字
 * @param data {Object | Array}      //  要插入的数据
 * @param callback {Function}    //    回调函数
 */
function insert(collectionName, data, callback) {
    connect(collectionName, function (collection, db) {
        collection.insert(data, function (err, result) {
            if (err) {
                console.log('Error:' + err);
                return;
            }
            callback(result);
            db.close();
        });
    })
}

/**
 * 更新文档方法
 * @param collectionName    //  集合的名字
 * @param whereStr      //  查询的数据
 * @param updateStr      // 更新的数据
 * @param callback    //    回调函数
 */
function update(collectionName, whereStr, updateStr, callback) {
    connect(collectionName, function (collection, db) {
        collection.update(whereStr,updateStr, function (err, result) {
            if (err) {
                console.log('Error:' + err);
                return;
            }
            callback(result);
            db.close();
        });
    })
}

/**
 * @description 查询文档方法
 * @param collectionName    //  集合的名字
 * @param data   //  要查询的数据
 * @param callback    //    回调函数
 */
function find(collectionName, data, callback) {
    // var start = process.hrtime()[1];
    connect(collectionName, function (collection, db) {
        // var end = process.hrtime()[1];
        // console.log("连接耗时:" + (end - start));
        collection.find(data).toArray(function(err, result) {
            if(err)
            {
                console.log('Error:'+ err);
                return;
            }
            callback(result);
            db.close();
        });
    })
}

/**
 * 删除文档方法
 * @param collectionName    //  集合的名字
 * @param data   //  要查询的数据
 * @param callback    //    回调函数
 */
function remove(collectionName, data, callback) {
    connect(collectionName, function (collection, db) {
        collection.remove(data).toArray(function(err, result) {
            if(err)
            {
                console.log('Error:'+ err);
                return;
            }
            callback(result);
            db.close();
        });
    })
}

/**
 * 删除文档方法
 * @param str    //   数据库连接的字符串
 */
function setConnect(str) {
    DB_CONN_STR = str;
}

/**
 *
 * @module
 */
module.exports = {
    insert: insert,
    find: find,
    update: update,
    remove: remove,
    setConnect: setConnect,
    getCollection: connect  //   获取数据库连接,方便自定义复杂的查询操作
};

使用方法如下

var mongodb = require('./mongo');  //	require里的路径根据你把这个自定义模块放哪了而定
mongodb.setConnect('mongodb://localhost:27017/test');	//	设置数据库连接参数

mongodb.insert('user', {
	username: "嘿嘿嘿", 
	password: "123456"
}, function (result) {
	//    result 为操作成功后的返回值
});

mongodb.find('user', {username: "嘿嘿嘿"}, function (result) {

});

mongodb.update('user', {
	username: username, 
	password: password
}, {
	$set: {authToken: authToken}
}, function (result) {
	
});

//  还有个删除,和查询操作一样,不举例了。

//  也可以通过 `getCollection()` 来或许连接函数,自定义复杂的操作


mongodb.getConnect("user", function (collection, db) {
    collection.remove(data).toArray(function(err, result) {
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }
        //	code
        //	...
        db.close();
    });
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值