C# 查询MongoDB中的数据

对MongoDB的API结果简单封装,实现对MongoDB进行查询;

程序主入口

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace MongoDB
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.WriteLine("这是一个mongoDB Demo");
14 
15             //连接字符串
16             var connectionString = "mongodb://kyeuser:test12345678@172.20.2.95:5001/TestLogs";
17 
18             //集合名称
19             var connectionName = "TestToolFrom";
20 
21             //实例化一个服务类
22             MongoDBServer mongoDBServer = new MongoDBServer(connectionString);
23 
24             //获取集合数量
25             long count = mongoDBServer.GetCount(connectionName);
26 
27             Console.WriteLine("总数据量:" + count);
28 
29             //获取集合数据
30             List<MongoDB.Bson.BsonDocument> dataList = mongoDBServer.GetList(connectionName, null, null, null, 1, 10);
31 
32             foreach (var item in dataList)
33             {
34                 foreach (var itemValue in item.Elements)
35                 {
36                     Console.WriteLine(itemValue.Name + "  =>  " + itemValue.Value);
37                 }
38             }
39 
40             Console.ReadKey();
41         }
42     }
43 }
View Code

 

MongoDB服务类

  1 using MongoDB.Bson;
  2 using MongoDB.Driver;
  3 using System.Collections.Generic;
  4 
  5 namespace MongoDB
  6 {
  7     /// <summary>
  8     /// MongoDB服务类
  9     /// </summary>
 10     public sealed class MongoDBServer
 11     {
 12         #region 字段属性
 13         private string _connectionString = "";
 14         private string _databaseName = "";
 15 
 16         /// <summary>
 17         /// 连接字符串
 18         /// </summary>
 19         public string ConnectionString { get { return _connectionString; } }
 20 
 21         /// <summary>
 22         /// 数据库名称
 23         /// </summary>
 24         public string DatabaseName { get { return _databaseName; } }
 25 
 26         //数据库对象
 27         private IMongoDatabase _database;
 28         #endregion
 29 
 30         #region 构造函数
 31         /// <summary>
 32         /// 使用连接字符串构造一个MongoDB服务类
 33         /// </summary>
 34         /// <param name="connectionString">连接字符串;格式:mongodb://用户名:密码@ip:端口/数据库;样例:mongodb://kyeuser:test12345678@127.0.0.1:5001/TestLogs</param>
 35         public MongoDBServer(string connectionString)
 36         {
 37             _connectionString = connectionString;
 38             var mongoUrl = new MongoUrlBuilder(connectionString);
 39             // 获取数据库名称
 40             _databaseName = mongoUrl.DatabaseName;
 41             // 创建并实例化客户端
 42             var _client = new MongoClient(mongoUrl.ToMongoUrl());
 43             //  根据数据库名称实例化数据库
 44             _database = _client.GetDatabase(_databaseName);
 45         }
 46         #endregion
 47 
 48         #region 根据集合名称获取集合
 49         /// <summary>
 50         /// 根据集合名称获取集合
 51         /// </summary>
 52         /// <param name="collectionName"></param>
 53         /// <returns></returns>
 54         private IMongoCollection<BsonDocument> GetCollection(string collectionName)
 55         {
 56             return _database.GetCollection<BsonDocument>(collectionName);
 57         }
 58         #endregion
 59 
 60         #region 生成过滤条件
 61         /// <summary>
 62         /// 生成过滤条件
 63         /// </summary>
 64         /// <param name="filterList">过滤条件</param>
 65         /// <param name="isAndFilter">是否是And过滤条件</param>
 66         /// <returns></returns>
 67         private FilterDefinition<BsonDocument> GenerateFilter(List<MongoDBFilter> filterList, bool isAndFilter)
 68         {
 69             if (null == filterList || 0 == filterList.Count)
 70             {
 71                 return FilterDefinition<BsonDocument>.Empty;
 72             }
 73             var filterBuilder = Builders<BsonDocument>.Filter;
 74             List<FilterDefinition<BsonDocument>> tempFilterList = new List<FilterDefinition<BsonDocument>>();
 75             foreach (var item in filterList)
 76             {
 77                 FilterDefinition<BsonDocument> filter = FilterDefinition<BsonDocument>.Empty;
 78                 switch (item.Operator)
 79                 {
 80                     case OperatorEnum.Eq:
 81                         filter = filterBuilder.Eq(item.Name, item.Value);
 82                         break;
 83                     case OperatorEnum.Lt:
 84                         filter = filterBuilder.Lt(item.Name, item.Value);
 85                         break;
 86                     case OperatorEnum.Lte:
 87                         filter = filterBuilder.Lte(item.Name, item.Value);
 88                         break;
 89                     case OperatorEnum.Gt:
 90                         filter = filterBuilder.Gt(item.Name, item.Value);
 91                         break;
 92                     case OperatorEnum.Gte:
 93                         filter = filterBuilder.Gte(item.Name, item.Value);
 94                         break;
 95                     case OperatorEnum.Ne:
 96                         filter = filterBuilder.Ne(item.Name, item.Value);
 97                         break;
 98                     case OperatorEnum.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                 return filterBuilder.And(tempFilterList);
107             }
108             return filterBuilder.Or(tempFilterList);
109         }
110         #endregion
111 
112         #region 生成排序
113         /// <summary>
114         /// 生成排序
115         /// </summary>
116         /// <param name="orderBy">排序</param>
117         /// <returns></returns>
118         private SortDefinition<BsonDocument> GenerateSort(MongoDBOrderBy orderBy)
119         {
120             if (null == orderBy)
121             {
122                 return null;
123             }
124             var sortBuilder = Builders<BsonDocument>.Sort;
125             if (orderBy.OrderBy == 0)
126             {
127                 return sortBuilder.Ascending(orderBy.Column);
128             }
129             return sortBuilder.Descending(orderBy.Column);
130         }
131         #endregion
132 
133         #region 获取数据量
134         /// <summary>
135         /// 根据集合名称获取总数据量
136         /// </summary>
137         /// <param name="collectionName">集合名称</param>
138         /// <returns></returns>
139         public long GetCount(string collectionName)
140         {
141             return GetCount(collectionName, null, null);
142         }
143 
144         /// <summary>
145         /// 根据集合名称获取总数据量
146         /// </summary>
147         /// <param name="collectionName">集合名称</param>
148         /// <param name="andFilterList">and过滤条件</param>
149         /// <returns></returns>
150         public long GetCount(string collectionName, List<MongoDBFilter> andFilterList)
151         {
152             return GetCount(collectionName, andFilterList, null);
153         }
154 
155         /// <summary>
156         /// 根据集合名称获取总数据量
157         /// </summary>
158         /// <param name="collectionName">集合名称</param>
159         /// <param name="andFilterList">and过滤条件</param>
160         /// <param name="anyFilterList">or过滤条件</param>
161         /// <returns></returns>
162         public long GetCount(string collectionName, List<MongoDBFilter> andFilterList, List<MongoDBFilter> anyFilterList)
163         {
164             FilterDefinition<BsonDocument> andFilter = this.GenerateFilter(andFilterList, true);
165             FilterDefinition<BsonDocument> anyFilter = this.GenerateFilter(anyFilterList, false);
166             var allFilter = andFilter & anyFilter;
167             return GetCollection(collectionName).Find<BsonDocument>(allFilter).CountDocuments();
168         }
169         #endregion
170 
171         #region 获取集合数据
172         /// <summary>
173         /// 根据集合名称获取集合中的数据
174         /// </summary>
175         /// <param name="collectionName">集合名称</param>
176         /// <param name="andFilterList">and过滤条件</param>
177         /// <param name="anyFilterList">or过滤条件</param>
178         /// <param name="orderColumn">排序列</param>
179         /// <param name="orderBy">排序方式(desc | asc)</param>
180         /// <param name="pageIndex">当前页</param>
181         /// <param name="pageSize">一页显示多少条</param>
182         /// <returns></returns>
183         public List<BsonDocument> GetList(string collectionName, List<MongoDBFilter> andFilterList, List<MongoDBFilter> anyFilterList, MongoDBOrderBy orderBy, int pageIndex, int pageSize)
184         {
185             //生成过滤条件
186             FilterDefinition<BsonDocument> andFilter = this.GenerateFilter(andFilterList, true);
187             FilterDefinition<BsonDocument> anyFilter = this.GenerateFilter(andFilterList, false);
188             var allFilter = andFilter & anyFilter;
189 
190             //生成排序
191             SortDefinition<BsonDocument> sort = this.GenerateSort(orderBy);
192 
193             List<BsonDocument> mongoDataList = null;
194             if (null == sort)
195             {
196                 //不需要排序
197                 mongoDataList = GetCollection(collectionName).Find<BsonDocument>(allFilter).Skip(pageSize * (pageIndex - 1)).Limit(pageSize).ToList();
198 
199             }
200             else
201             {
202                 //要排序
203                 mongoDataList = GetCollection(collectionName).Find<BsonDocument>(allFilter).Sort(sort).Skip(pageSize * (pageIndex - 1)).Limit(pageSize).ToList();
204             }
205             if (null == mongoDataList || mongoDataList.Count < 1)
206             {
207                 return null;
208             }
209             return mongoDataList;
210         }
211         #endregion
212     }
213 }
View Code

 

过滤条件

 1 #region 过滤条件
 2     /// <summary>
 3     /// 过滤条件
 4     /// </summary>
 5     public class MongoDBFilter
 6     {
 7         /// <summary>
 8         /// 列名
 9         /// </summary>
10         public string Name { get; set; }
11 
12         /// <summary>
13         ///14         /// </summary>
15         public object Value { get; set; }
16 
17         /// <summary>
18         /// 操作符
19         /// </summary>
20         public OperatorEnum Operator { get; set; }
21 
22         /// <summary>
23         /// 是否区分大小写(默认不忽略)
24         /// </summary>
25         public bool IsOrdinalIgnoreCase { get; set; }
26     }
27     #endregion
View Code

 

排序

 1 #region 排序
 2     /// <summary>
 3     /// 排序
 4     /// </summary>
 5     public class MongoDBOrderBy
 6     {
 7         /// <summary>
 8         /// 排序列
 9         /// </summary>
10         public string Column { get; set; }
11 
12         /// <summary>
13         /// 0 升序 1 降序
14         /// </summary>
15         public int OrderBy { get; set; }
16     }
17     #endregion
View Code


操作符

 1 #region 操作符
 2     /// <summary>
 3     /// 操作符
 4     /// </summary>
 5     public enum OperatorEnum
 6     {
 7         /// <summary>
 8         /// 相等
 9         /// </summary>
10         Eq,
11 
12         /// <summary>
13         /// 小于
14         /// </summary>
15         Lt,
16 
17         /// <summary>
18         /// 小于或等于
19         /// </summary>
20         Lte,
21 
22         /// <summary>
23         /// 大于
24         /// </summary>
25         Gt,
26 
27         /// <summary>
28         /// 大于或等于
29         /// </summary>
30         Gte,
31 
32         /// <summary>
33         /// 不等于
34         /// </summary>
35         Ne,
36 
37         /// <summary>
38         /// 模糊匹配
39         /// </summary>
40         Like,
41     }
42     #endregion
View Code

 

附DEMO下载地址:https://files.cnblogs.com/files/xwwaizy/MongoDB.zip 开发工具:visual studio 2013

posted @ 2018-07-23 21:06  Mr_Xie  阅读(754)  评论(0)    收藏  举报