BaseMongo基类设计
2015-04-22 22:31
465 查看
为进一步完善框架应用,本次系列文章主要是介绍如何完善架构功能,以及如何应用架构做一些具体的应用开发。本系列课程可以在github上找到相应资源,具体每篇文章中都会提供链接。
本次介绍的主要是mongo基类的设计,以及应用。相关请查看文章下面链接下载http://5xpan.com/fs/7hueanfgd6h350fe4/(下载链接有收益,请原谅有广告)。
如果你嫌弃慢的话,也可以直接去github(https://github.com/tnodejs/BaseMongodb)
该方法中调用了,本基类中的get_db_connect_url方法,主要是为了获取DB连接字符。
方法中本应该读取配置文件,这部分为了省事直接写在函数中,读者使用时,请使用读取配置方法获取。
方法的示例请参考源码example中的findOne.js
数据插入示例
数据查询示例
等等,具体请查看源码中的测试代码。
那么以上模块层类,就可以直接被controller层或者其他模块层调用,如下调用方式。
具体就看哪种需要了,如果你觉得基类对你有帮助的话,帮忙去该网站注册一下,给博主带来绵薄的收益。
http://dd.ma/4hXDyCkp
博文来自:http://blog.lovedan.cn
本次介绍的主要是mongo基类的设计,以及应用。相关请查看文章下面链接下载http://5xpan.com/fs/7hueanfgd6h350fe4/(下载链接有收益,请原谅有广告)。
如果你嫌弃慢的话,也可以直接去github(https://github.com/tnodejs/BaseMongodb)
主要函数结构
私有方法
connection
该函数主要是创建mongodb链接,并将链接对象缓存。function connection(tableName, callback){ var connect_url = get_db_connect_url(); if(DB_TMP['db']){ DB_TMP['db'].collection(tableName, function(err, collection){ if(err){ console.log('basemongo can not connection with db table error'); process.exit(1); } callback(collection); }); return; } MongoClient.connect(connect_url, {native_parser:true}, function(err, db) { if(err){ console.log('basemongo can not connection with db'); process.exit(1); } DB_TMP['db'] = db; if(!tableName){ return; } db.collection(tableName, function(err, collection){ if(err){ console.log('basemongo can not connection with db table error'); process.exit(1); } callback(collection); }); }); }
该方法中调用了,本基类中的get_db_connect_url方法,主要是为了获取DB连接字符。
get_db_connect_url
获取db的链接字符串,该函数主要被connection调用。function get_db_connect_url(){ /*var dbConfig = LIBRARY.getConfig('mongodb', 'db'); var host = dbConfig['host'] , port = dbConfig['port'] , dbName = dbConfig['db_name'] , user = dbConfig['user'] , password = dbConfig['password']; */ var host = 'localhost'; var port = '27017'; var user = ''; var password = ''; var dbName = 'test_book'; if(!user && !password){ return "mongodb://" + host + ":" + port + "/" + dbName; } return "mongodb://" + user + ":" + password + "@" + host + ":" + port + "/" + dbName; }
方法中本应该读取配置文件,这部分为了省事直接写在函数中,读者使用时,请使用读取配置方法获取。
filter_options
对查询功能中的一些基本操作sort、limit以及skip等做一个filter,统一处理逻辑。function filter_options(){ var fields = arguments[0] ? arguments[0] : null; var limit = arguments[1] ? arguments[1] : 0; var sort = arguments[2] ? arguments[2] : null; var skip = arguments[3] ? arguments[3] : 0; var options = {}; if(limit !== 0){ options.limit = limit; } if(skip !== 0){ options.skip = skip; } if(fields){ options.fields = fields; } if(sort){ options.sort = sort; } options.timeout = timeout ; return options; }
get_result
由于mongodb的基础库返回的数据非常多,这部分就是将mongodb操作后返回的数据做一层处理,从而在外层调用可以清晰的知道返回结果信息。/** * @desc 对mongodb库返回做filter * */ function get_result(result){ if(!result['result']){ return false; } if(result['result']['ok'] != 1){ return false; } if(result['result']['n'] < 1){ return false; } return true; }
公有方法
initConnecnt
该方法初始化mongodb链接对象。在一般情况下是不需要调用该函数,但是在特殊情况下,该函数可以弥补一些同时多请求导致的bug问题。具体的话可以参考我之前的一篇文章《Node.js执行流程图引发的思考》/** * @desc 初始化mongodb的连接对象 * */ this.initConnecnt = function(){ connection(false, function(db){ DB_TMP['db'] = db; }); }
findOne
查询单条数据记录,只返回单条数据,如果未找到数据返回空,异常会打印error信息,并返回false。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
fields | json | 返回的字段 | {‘_id’:1, ‘name’:1} |
find
查询多条数据记录,如果未找到数据返回空,异常会打印error信息,并返回false。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
callback | function | 回调函数 | function(err, result){} |
fields | json | 返回的字段 | {‘_id’:1, ‘name’:1} |
limit | int | 返回条数 | 5 |
skip | int | 跳过的条数 | 5 |
sort | json | 排序字段 | {‘name’:1} |
insert
插入多条数据,返回插入数据列表。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
rowInfos | array | 插入的数据数组 | [{‘name’:’danhuang’}] |
callback | function | 回调函数 | function(err, result){} |
save
插入单条数据,返回被插入数据的mongo id。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
rowInfo | json | 插入的数据 | {‘name’:’danhuang’} |
callback | function | 回调函数 | function(err, result){} |
remove(findAndRemove)
删除数据,可删除单条,也可删除所有符合条件的。括号中的为查询并删除。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
removeAll | boolean | 删除全部 | true |
callback | function | 回调函数 | function(err, result){} |
update(findAndModify)
更新单条数据,括号中的为查询并修改。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
rowInfo | json | 插入的数据 | {‘name’:’danhuang’} |
update_set | boolean | 是否局部更新 | true |
callback | function | 回调函数 | function(err, result){} |
updateAll
更新多条数据。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
rowInfo | json | 插入的数据 | {‘name’:’danhuang’} |
update_set | boolean | 是否局部更新 | true |
callback | function | 回调函数 | function(err, result){} |
count
查询符合条件的数据数量。参数名称 | 参数类型 | 参数说明 | 参数示例 |
---|---|---|---|
tableName | string | 操作的表名 | book |
condition | json | 查询条件 | {‘name’:1} |
callback | function | 回调函数 | function(err, result){} |
示例介绍
数据层操作类
可以直接的将该类作为数据层的操作类,开发者可以直接调用该模块进行开发,例如下面代码。数据插入示例
ar Basemongo = require('./basemongo'); var basemongo = new Basemongo(); var rowInfos = [ { 'name' : 'mongo2', 'test_url' : 'http://blog.lovedan.cn', 'download_book' : 'http://download.lovedan.cn', 'create_time' : new Date() }, { 'name' : 'mongo3', 'test_url' : 'http://blog.lovedan.cn', 'download_book' : 'http://download.lovedan.cn', 'create_time' : new Date() } ]; basemongo.insert('book', rowInfos, function(result){ if(false === result){ console.log('insert error'); } else { console.log(result); } });
数据查询示例
/* condition fields */ var condition = {'test_url' : 'http://blog.lovedan.cn'}; var fields = {"create_time":0}; /* test for find rowinfo */ basemongo.find('book', condition, function(result){ if(false === result){ console.log('find error'); } else { console.log(result); } }, fields);
等等,具体请查看源码中的测试代码。
作为基类
当然也可以将该模块作为基类,提供其他模块层类调用,这样将其作为父类方法,示例代码如下。/** * * @type class * @author danhuang * @time 2015-04-07 * @desc 主要用于新增book数据 */ var Model = require('../../basemongo'); var SYS = require('util'); function Book(){ var _self = this; var _tableName = 't_book'; Model.call(_self); SYS.inherits(_self, Model); this.addDataInDb = function(rowInfo, callback){ _self.save(_tableName, rowInfo, function(ret){ if(ret){ callback(ret); } else { callback(false); } }); }; } var book = new Book(); exports.addDataInDb = book.addDataInDb;
那么以上模块层类,就可以直接被controller层或者其他模块层调用,如下调用方式。
var book = require('./model_extended/book'); var rowInfo = { 'name' : 'Node.js book', 'author' : 'danhuang', 'desc' : 'good book', 'catalogue' : ['1', '2'], 'content' : 'dasadasdasdasd', 'cover' : 'http://blog.lovedan.cn', 'pic_urls' : 'http://download.lovedan.cn', 'category_ids' : ['1', '2'], 'pdf_url' : 'http://download.lovedan.cn', 'download_url' : 'http://download.lovedan.cn', 'download_tips' : 'dddd', 'buy_list' : 'http://blog.lovedan.cn' }; book.addDataInDb(rowInfo, function(ret){ console.log(ret); });
具体就看哪种需要了,如果你觉得基类对你有帮助的话,帮忙去该网站注册一下,给博主带来绵薄的收益。
http://dd.ma/4hXDyCkp
博文来自:http://blog.lovedan.cn
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- C#中使用1.7版本驱动操作MongoDB简单例子
- php实现的mongodb操作类实例
- 解决mongodb在ubuntu下启动失败,提示couldn‘t remove fs lock errno:9 Bad file descriptor的错误
- 在PostgreSQL的基础上创建一个MongoDB的副本的教程
- java操作mongodb示例分享
- php对mongodb的扩展(初出茅庐)
- 作为PHP程序员应该了解MongoDB的五件事
- 基于MySQL到MongoDB简易对照表的详解
- MongoDB入门教程之C#驱动操作实例
- MongoDB为用户设置访问权限
- MongoDB db.serverStatus()输出内容中文注释
- mongodb与mysql命令详细对比
- Ubuntu中安装MongoDB及执行一些简单操作笔记
- MongoDB 语法使用小结
- PHP实现的MongoDB数据库操作类分享