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 }