1 usingMongoDB.Bson;2 usingMongoDB.Driver;3 usingSystem.Collections.Generic;4

5 namespaceMongoDB6 {7 ///

8 ///MongoDB服务类9 ///

10 public sealed classMongoDBServer11 {12 #region 字段属性

13 private string _connectionString = "";14 private string _databaseName = "";15

16 ///

17 ///连接字符串18 ///

19 public string ConnectionString { get { return_connectionString; } }20

21 ///

22 ///数据库名称23 ///

24 public string DatabaseName { get { return_databaseName; } }25

26 //数据库对象

27 privateIMongoDatabase _database;28 #endregion

29

30 #region 构造函数

31 ///

32 ///使用连接字符串构造一个MongoDB服务类33 ///

34 /// 连接字符串;格式:mongodb://用户名:密码@ip:端口/数据库;样例:mongodb://kyeuser:test12345678@127.0.0.1:5001/TestLogs

35 public MongoDBServer(stringconnectionString)36 {37 _connectionString =connectionString;38 var mongoUrl = newMongoUrlBuilder(connectionString);39 //获取数据库名称

40 _databaseName =mongoUrl.DatabaseName;41 //创建并实例化客户端

42 var _client = newMongoClient(mongoUrl.ToMongoUrl());43 //根据数据库名称实例化数据库

44 _database =_client.GetDatabase(_databaseName);45 }46 #endregion

47

48 #region 根据集合名称获取集合

49 ///

50 ///根据集合名称获取集合51 ///

52 ///

53 ///

54 private IMongoCollection GetCollection(stringcollectionName)55 {56 return _database.GetCollection(collectionName);57 }58 #endregion

59

60 #region 生成过滤条件

61 ///

62 ///生成过滤条件63 ///

64 /// 过滤条件

65 /// 是否是And过滤条件

66 ///

67 private FilterDefinition GenerateFilter(List filterList, boolisAndFilter)68 {69 if (null == filterList || 0 ==filterList.Count)70 {71 return FilterDefinition.Empty;72 }73 var filterBuilder = Builders.Filter;74 List> tempFilterList = new List>();75 foreach (var item infilterList)76 {77 FilterDefinition filter = FilterDefinition.Empty;78 switch(item.Operator)79 {80 caseOperatorEnum.Eq:81 filter =filterBuilder.Eq(item.Name, item.Value);82 break;83 caseOperatorEnum.Lt:84 filter =filterBuilder.Lt(item.Name, item.Value);85 break;86 caseOperatorEnum.Lte:87 filter =filterBuilder.Lte(item.Name, item.Value);88 break;89 caseOperatorEnum.Gt:90 filter =filterBuilder.Gt(item.Name, item.Value);91 break;92 caseOperatorEnum.Gte:93 filter =filterBuilder.Gte(item.Name, item.Value);94 break;95 caseOperatorEnum.Ne:96 filter =filterBuilder.Ne(item.Name, item.Value);97 break;98 caseOperatorEnum.Like:99 filter = filterBuilder.Regex(item.Name, new BsonRegularExpression(string.Format("/{0}/m{1}", item.Value, item.IsOrdinalIgnoreCase ? "i" : "")));100 break;101 }102 tempFilterList.Add(filter);103 }104 if(isAndFilter)105 {106 returnfilterBuilder.And(tempFilterList);107 }108 returnfilterBuilder.Or(tempFilterList);109 }110 #endregion

111

112 #region 生成排序

113 ///

114 ///生成排序115 ///

116 /// 排序

117 ///

118 private SortDefinitionGenerateSort(MongoDBOrderBy orderBy)119 {120 if (null ==orderBy)121 {122 return null;123 }124 var sortBuilder = Builders.Sort;125 if (orderBy.OrderBy == 0)126 {127 returnsortBuilder.Ascending(orderBy.Column);128 }129 returnsortBuilder.Descending(orderBy.Column);130 }131 #endregion

132

133 #region 获取数据量

134 ///

135 ///根据集合名称获取总数据量136 ///

137 /// 集合名称

138 ///

139 public long GetCount(stringcollectionName)140 {141 return GetCount(collectionName, null, null);142 }143

144 ///

145 ///根据集合名称获取总数据量146 ///

147 /// 集合名称

148 /// and过滤条件

149 ///

150 public long GetCount(string collectionName, ListandFilterList)151 {152 return GetCount(collectionName, andFilterList, null);153 }154

155 ///

156 ///根据集合名称获取总数据量157 ///

158 /// 集合名称

159 /// and过滤条件

160 /// or过滤条件

161 ///

162 public long GetCount(string collectionName, List andFilterList, ListanyFilterList)163 {164 FilterDefinition andFilter = this.GenerateFilter(andFilterList, true);165 FilterDefinition anyFilter = this.GenerateFilter(anyFilterList, false);166 var allFilter = andFilter &anyFilter;167 return GetCollection(collectionName).Find(allFilter).CountDocuments();168 }169 #endregion

170

171 #region 获取集合数据

172 ///

173 ///根据集合名称获取集合中的数据174 ///

175 /// 集合名称

176 /// and过滤条件

177 /// or过滤条件

178 /// 排序列

179 /// 排序方式(desc | asc)

180 /// 当前页

181 /// 一页显示多少条

182 ///

183 public List GetList(string collectionName, List andFilterList, List anyFilterList, MongoDBOrderBy orderBy, int pageIndex, intpageSize)184 {185 //生成过滤条件

186 FilterDefinition andFilter = this.GenerateFilter(andFilterList, true);187 FilterDefinition anyFilter = this.GenerateFilter(andFilterList, false);188 var allFilter = andFilter &anyFilter;189

190 //生成排序

191 SortDefinition sort = this.GenerateSort(orderBy);192

193 List mongoDataList = null;194 if (null ==sort)195 {196 //不需要排序

197 mongoDataList = GetCollection(collectionName).Find(allFilter).Skip(pageSize * (pageIndex - 1)).Limit(pageSize).ToList();198

199 }200 else

201 {202 //要排序

203 mongoDataList = GetCollection(collectionName).Find(allFilter).Sort(sort).Skip(pageSize * (pageIndex - 1)).Limit(pageSize).ToList();204 }205 if (null == mongoDataList || mongoDataList.Count < 1)206 {207 return null;208 }209 returnmongoDataList;210 }211 #endregion

212 }213 }

c# mongodb or查询_C# 查询MongoDB中的数据相关推荐

  1. 查询和删除表中重复数据sql语句

    查询和删除表中重复数据sql语句 (一) 1.查询表中重复数据.select * from people where peopleId in (select   peopleId  from   pe ...

  2. cxgrid中纵横单元格合并_逆向查询合并单元格中的数据,这两种方法你值得拥有...

    ​有同事询问了一个问题,说下面的这种表格,我有部门和人员的清单列表,如果我想根据人员清单去查询其所在的部门要怎么实现呢? 因为部门列的数据内容是经过合并的,如果我们直接使用Vlookup进行查找,查找 ...

  3. sql语句-如何以一个表中的数据为条件据查询另一个表中的数据

    下面这个是SQL语句的一个基本样式: select *from 表2where 姓名 in (select 姓名from 表1where 条件) 实例需求:在项目中是这样应用的:我需要根据库位编号去查 ...

  4. 时间序列数据和MongoDB:第三部分 - 查询,分析和呈现时间序列数据

    作者:Robert Walters 译者:刘东华 (Martin Liu) 在 时间序列数据和MongoDB中:第一部分 - 简介 我们回顾了您需要了解的关键问题,以了解数据库的查询访问模式.在 时间 ...

  5. sqlserver垮库查询_Oracle和SQLServer中实现跨库查询

    一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...

  6. mysql循环查询一个表中的数据并进行修改_JavaScript学习笔记(二十四)-- MYSQL基础操作...

    MYSQL mysql 是一个数据库的名字 和 php 合作的比较好的数据库 之前我们说过一个问题,前端向后端索要数据,后端就是去数据库中查询数据,返回给前端 接下来就聊聊使用 php 操作数据库 M ...

  7. MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名

    目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...

  8. Oracle笔记(操作Scott中的数据)

    文章目录 1 数据库相关概念 2 数据库的发展阶段 3 Oracle相关介绍 3.1 软件相关介绍 3.2 软件目录结构介绍 3.3 软件原理 3.3.1 软件体系架构 3.3.2 本地网络服务配置 ...

  9. oracle显示多表数据,Oracle DB 使用连接显示多个表中的数据

    在Oracle9i之前的发行版中,该联接语法与美国国家标准协会(ANSI) 的标准不同.与以前发行版中的Oracle 专用联接语法相比,符合SQ • 编写SELECT语句,以使用等值联接和非等值联接访 ...

最新文章

  1. 学习webpack(二)
  2. 面试官给我挖坑:rm删除文件之后,空间就被释放了吗?
  3. SEO技巧之网站优化的具体细节
  4. FPGA存储器DDR5简介
  5. 福字背景|传统中国风国潮设计必备素材!
  6. Google协作平台中文版BUG两条
  7. 自动语音识别的原理是什么,它的作用是什么
  8. 异或运算符 判断奇偶
  9. MTK车载平台实现MIPI转LVDS驱动移植
  10. 联想微型计算机怎么进入bios,联想笔记本怎么进入bios 电脑屏幕上出现Lenovo并
  11. 数据分析中应该了解的几种常用预测方法
  12. 六种Web身份验证方法比较和Flask示例代码
  13. 2019-9-11-数据结构查找方法总结
  14. Docker学习之二------基础命令(镜像、容器)
  15. mysql安装时损坏的图像_损坏的图像,详细教您提示损坏的图像该怎么解决
  16. 亚利桑那银行改善;基于图森商贸评级提升
  17. 通过access口加vlan标签吗_7.3.2 将Access端口添加到VLAN中
  18. Linux操作系统配置Go编程环境
  19. Linux 操作命令 tail
  20. 《经济学人》:狂热是永恒的源泉

热门文章

  1. 上海交大计算机学院张卫东,张卫东
  2. 使用Visual Studio Code 运行编写第一个html文件
  3. Linux用extundelete恢复磁盘文件-攻防世界Recover-Deleted-File
  4. 对Python匿名函数和@property小小理解,希望对你学习也有帮助
  5. python 判断变量是否是 None 的三种写法
  6. Python基础教程:list列表、tuple元组、range常用方法总结
  7. Python实现字符串反转的6种方法
  8. Python---udp绑定信息以及网络通信过程
  9. 电子计算机之父冯.诺依曼的主要贡献,约翰·冯·诺依曼,约翰·冯·诺依曼的生平,贡献等...
  10. C语言十个字母用冒泡法排序,冒泡排序法(C语言) - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...