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 }
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 }
过滤条件
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
排序
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
操作符
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
附DEMO下载地址:https://files.cnblogs.com/files/xwwaizy/MongoDB.zip 开发工具:visual studio 2013

浙公网安备 33010602011771号