mongdo通用类(C#版)

    日前从公司离职,很快,还没休息就步入了现在的公司,开始跟着公司的脚步走。

    公司的项目基本都是大数据的,所以在数据库上大部分都是使用Mongodb和Redis,基本都是Nosql型的数据库为主。以前自己学着做过Mongodb和Redis的Demo,大体知道其怎么去运用,只是没有一个规范化的封装和运用,单纯是学习。现在有实战项目了,就激起了我前进学习的心,趁着今天自己查了下一些资料,学习了借鉴了一些前辈的方法后自己也封装了一个Mongdb的底层通用类,这里分享出来跟大家一起学习下。

    这里主要是讲我封装的底层,不涉及到Mongodb的安装,启动,可视化查询等东西,后面会附上一些参考的地址供大家一起学习。

    目前mongodb提供的驱动主要有两种:

    1.官网驱动  下载地址:http://github.com/mongodb/mongo-csharp-driver/downloads

2.第三方的samus驱动 下载地址:https://github.com/samus/mongodb-csharp

两个驱动的运用自己都有使用过,个人感觉官方的驱动提供的方法比较多,用起来也比较顺手,而且更新度比samus的高,所以自己使用的是官方的驱动。

   官网驱动的简单使用

    主要使用下面的两个dll

    MongoDB.dll          驱动的主要程序

    MongoDB.GridFS.dll    用于存储大文件。

      基本的增删改查代码如下:

 View Code

    封装扩展使用

       1.数据库配置文件

考虑到一个项目里面可能使用到不同的数据库(比如:普通数据和文件数据等分别存到不同数据库中),也有可能会跨服务器查询,所以这里首先创建一个配置文件帮助类,主要是可以进行多个数据库配置,满足跨服务器,跨数据的需求。

配置格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<ServiceConfig><mongodbs><Item dbName="myDb" hostName="mongodb://127.0.0.1:27017"></Item><Item dbName="myDb1" hostName="mongodb://127.0.0.1:27017"></Item><Item dbName="myDb2" hostName="mongodb://127.0.0.1:27017"></Item></mongodbs>
</ServiceConfig>

  Xml序列化对象类

 View Code

  读取配置文件管理类

 View Code

 

   2.实体通用接口

mongodb中本身没有自增ID的属性,自带有一个ObjectID,为了统一每个实体对象都有这个ID ,这里建立一个通用接口和一个底层实体基类来进行规范化处理

实体接口

 View Code

底层实体基类

 View Code

实体类的例子(继承于BaseModel类)

 View Code

  3.Mongodb通用帮助基类 (主要类)    

 View Code

    4.业务类

当新建一个表(mongodb里面叫做集合),需要对其进行操作,包括一些业务处理时。首先继承MongodbBase类,然后使用Init方法初始化对象,如下面的UserServcices类

 View Code

    5.使用    

 View Code

  以上就是自己封装的整体逻辑和代码,不过这里面还有一些不明白和不足的地方,这里提出来,希望大神们帮我解答下:

  1.返回值问题

   在添,删,改的使用,根据官网提供的驱动,都有一个WriteConcernResult对象返回,可是在测试中发现,这个返回的对象永远都是null

     2.增加ID问题

mongodb中本身没有自增ID的属性,自带有一个ObjectID,如果我需要一个自增ID,是否是自己建一个ID属性,然后在增加的时候自己控制+1?不过这样是否性能上比较低,还要考虑多线程并发的情况下加锁的问题。所以不知道这块大家是怎么去实现的?

   3.分页效率的问题

一开始分页我是先将结果转为Queryable,然后在进行操作,这个代码里面有这段,暂时注释掉了,后面再博客园上看到了一个前辈的mongodb分析后,改了下分页的方式,测试过很快,但在带条件获取记录行总数的时候,发现测试300W数据下,获取总数需要600ms的时间,不知道是我方法用错了还是有其他更好的?

   最后附在几个学习的地址

    mongodb入门:http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html

    官网驱动介绍:http://www.cnblogs.com/zhwl/p/3421034.html

    分页优化参考:http://www.cnblogs.com/capqueen/p/MongoDBPagination.html

  源码下载:戳这里-》

转载于:https://www.cnblogs.com/armyfai/p/4716984.html

mongdo通用类(C#版)相关推荐

  1. Windows任务管理 连接用户登录信息 通用类[C#版]

    通用类名[ComputerLoginUserInfo.cs] 代码如下: 代码 using System; //---引用 using System.Runtime.InteropServices; ...

  2. HTML5响应式企业集团织梦模板,(自适应手机版)响应式企业集团通用类网站织梦模板 HTML5响应式大气通用企业织梦源码+PC+wap+利于SEO优化...

    名称:(自适应手机版)响应式企业集团通用类网站织梦模板 HTML5响应式大气通用企业织梦源码+PC+wap+利于SEO优化 该模板是非常容易存活的,这样的网站很容易吸引访客点击,提升ip流量和pv是非 ...

  3. 一劳永逸,iOS 网页视图控制器通用类封装

    原文链接:http://www.jianshu.com/p/553424763585 随着 H5 的发展,在 iOS 开发中,网页视图的使用率逐渐提升,为了增加代码封装度.减轻开发负担,因此通常会对网 ...

  4. C#检测电脑的一些设置通用类(经典推荐)

    此类能检测出电脑的cpu序列号,获取网卡硬件地址,获取IP地址,获取硬盘ID,操作系统的登录用户名,PC类型,物理内存,就这些了,够用吧,谁在有能获取电脑别的信息的类,跟贴啊,欢迎大家分享,打造一个超 ...

  5. DataTable转ListModel通用类

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  6. C#.NET操作数据库通用类(MS SQL Server篇)

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  7. C#.NET操作数据库通用类

    下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句.执行存储过程.以下是其详细实现过程,希望大家共同修改优化之.稍后将介绍如何使用它 ...

  8. 《WebForm开发系列高级篇》Item2导出EXCEL通用类(GridView,DataList,Repeater,DetailView)

    1.导出效果图: 2.C#导出EXCEL通用类源代码: using System; using System.Data; using System.Configuration; using Syste ...

  9. Memcached通用类(基于enyim.com Memcached Client)

    一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP.如下图: <?xml version="1.0"?> <configuratio ...

最新文章

  1. 报告称中国出境游客移动支付消费首次超现金
  2. Ribbon源码解析(二)
  3. 某大厂外包员工在工作群抢新年红包,却被要求退回...
  4. 中国企业2017年数据_根据数据,2017年最好的免费在线课程
  5. 软件工程学习进度第十周汇总
  6. jQuery CSS 操作函数
  7. 学习python: x+=1 与 x = x + 1
  8. ASP.NET----GridView控件设置超链接
  9. 图解机器学习算法(3) | KNN算法及其应用(机器学习通关指南·完结)
  10. Centos系统安装masscan
  11. 汽车自动驾驶是人工智能吗,自动驾驶是人工智能
  12. Python 实现微信自动通过好友添加请求!!!
  13. c语言计算最大值与最小值的差,C语言 · 最大值与最小值计算
  14. “换个江湖再见”阿里巴巴20周年年会直击:岁月很暖,未来很酷。
  15. 二进制数据文件中的字符串替换的实现(C++)
  16. android 实现调查问卷-单选-多选
  17. jmeter 进行弱网测试
  18. flash引导层的应用
  19. 有些视频不显示IDM的下载按钮
  20. 基于人脸识别的智能服饰搭配小程序

热门文章

  1. C++常用函数有哪些?
  2. 开课吧:深入了解人工智能在金融行业中的应用
  3. 深入了解C++变量类型有哪些
  4. 谷歌发布自然问答数据集 Natural Questions
  5. JSOI 2008 【魔兽地图】
  6. 关于自定义异常中为什么带参构造器需要显示调用父类异常的带参构造器
  7. 30. Substring with Concatenation of All Words
  8. mysql常用基础操作语法(九)~~外连接查询【命令行模式】
  9. 《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
  10. SSMS 2005 连接 SQL SERVER 2008问题