MongoDbHelper 帮助类(上)
在网上搜索mongodbHelper的帮助类时,出来的东西都大同小异,再此摘录一下。
这些代码也看了一遍,总是感觉重复的代码太多了,在后续的文章中又整合了一下,请看下篇,欢迎指正!
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using MongoDB.Driver; 6 using MongoDB.Bson; 7 using MongoDB.Driver.Builders; 8 namespace MongoDbTest 9 { 10 /// <summary> 11 /// mongodb的封装类。 12 /// add by yancong2008@gmail.com 2011.05.14 13 /// </summary> 14 public sealed class MongoDBHelper 15 //public sealed class MongoDBHelper<T> 16 //where T :class 17 { 18 public static readonly string connectionString_Default = System.Configuration.ConfigurationManager.AppSettings["ConnectionString_mongoDB"];// mongodb://192.168.0.220:27017/effmaster 19 public static readonly string database_Default = System.Configuration.ConfigurationManager.AppSettings["Database_mongoDB"]; 20 21 #region 新增 22 public static SafeModeResult InsertOne<T>(string collectionName, T entity) 23 { 24 return InsertOne<T>(connectionString_Default, database_Default, collectionName, entity); 25 } 26 public static SafeModeResult InsertOne<T>(string connectionString, string databaseName, string collectionName, T entity) 27 { 28 SafeModeResult result = null;//new SafeModeResult(); 29 if (null == entity) 30 { 31 return null; 32 } 33 MongoServer server = MongoServer.Create(connectionString); 34 //获取数据库或者创建数据库(不存在的话)。 35 MongoDatabase database = server.GetDatabase(databaseName); 36 using (server.RequestStart(database))//开始连接数据库。 37 { 38 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 39 result = myCollection.Insert(entity); 40 } 41 return result; 42 } 43 public static IEnumerable<SafeModeResult> InsertAll<T>(string collectionName, IEnumerable<T> entitys) 44 { 45 return MongoDBHelper.InsertAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, entitys); 46 } 47 public static IEnumerable<SafeModeResult> InsertAll<T>(string connectionString, string databaseName, string collectionName, IEnumerable<T> entitys) 48 { 49 IEnumerable<SafeModeResult> result = null; 50 if (null == entitys) 51 { 52 return null; 53 } 54 MongoServer server = MongoServer.Create(connectionString); 55 //获取数据库或者创建数据库(不存在的话)。 56 MongoDatabase database = server.GetDatabase(databaseName); 57 using (server.RequestStart(database))//开始连接数据库。 58 { 59 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 60 result = myCollection.InsertBatch(entitys); 61 } 62 return result; 63 } 64 #endregion 65 #region 修改 66 public static SafeModeResult Save<T>(string collectionName, T entity) 67 { 68 return MongoDBHelper.Save<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, entity); 69 } 70 public static SafeModeResult Save<T>(string connectionString, string databaseName, string collectionName, T entity) 71 { 72 MongoServer server = MongoServer.Create(connectionString); 73 //获取数据库或者创建数据库(不存在的话)。 74 MongoDatabase database = server.GetDatabase(databaseName); 75 SafeModeResult result; 76 using (server.RequestStart(database))//开始连接数据库。 77 { 78 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 79 result = myCollection.Save(entity); 80 } 81 return result; 82 } 83 84 /// <summary> 85 /// 86 /// </summary> 87 /// <typeparam name="T"></typeparam> 88 /// <param name="collectionName"></param> 89 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 90 /// <param name="update">更新设置。调用示例:Update.Set("Title", "yanc") 或者 Update.Set("Title", "yanc").Set("Author", "yanc2") 等等</param> 91 /// <returns></returns> 92 public static SafeModeResult UpdateOne<T>(string collectionName, IMongoQuery query, IMongoUpdate update) 93 { 94 return MongoDBHelper.UpdateOne<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, update); 95 } 96 /// <summary> 97 /// 98 /// </summary> 99 /// <typeparam name="T"></typeparam> 100 /// <param name="connectionString"></param> 101 /// <param name="databaseName"></param> 102 /// <param name="collectionName"></param> 103 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 104 /// <param name="update">更新设置。调用示例:Update.Set("Title", "yanc") 或者 Update.Set("Title", "yanc").Set("Author", "yanc2") 等等</param> 105 /// <returns></returns> 106 public static SafeModeResult UpdateOne<T>(string connectionString, string databaseName, string collectionName, IMongoQuery query, IMongoUpdate update) 107 { 108 SafeModeResult result; 109 if (null == query || null == update) 110 { 111 return null; 112 } 113 MongoServer server = MongoServer.Create(connectionString); 114 //获取数据库或者创建数据库(不存在的话)。 115 MongoDatabase database = server.GetDatabase(databaseName); 116 using (server.RequestStart(database))//开始连接数据库。 117 { 118 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 119 result = myCollection.Update(query, update, UpdateFlags.None); 120 } 121 return result; 122 } 123 124 /// <summary> 125 /// 126 /// </summary> 127 /// <typeparam name="T"></typeparam> 128 /// <param name="collectionName"></param> 129 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 130 /// <param name="update">更新设置。调用示例:Update.Set("Title", "yanc") 或者 Update.Set("Title", "yanc").Set("Author", "yanc2") 等等</param> 131 /// <returns></returns> 132 public static SafeModeResult UpdateAll<T>(string collectionName, IMongoQuery query, IMongoUpdate update) 133 { 134 return MongoDBHelper.UpdateAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, update); 135 } 136 /// <summary> 137 /// 138 /// </summary> 139 /// <typeparam name="T"></typeparam> 140 /// <param name="connectionString"></param> 141 /// <param name="databaseName"></param> 142 /// <param name="collectionName"></param> 143 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 144 /// <param name="update">更新设置。调用示例:Update.Set("Title", "yanc") 或者 Update.Set("Title", "yanc").Set("Author", "yanc2") 等等</param> 145 /// <returns></returns> 146 public static SafeModeResult UpdateAll<T>(string connectionString, string databaseName, string collectionName, IMongoQuery query, IMongoUpdate update) 147 { 148 SafeModeResult result; 149 if (null == query || null == update) 150 { 151 return null; 152 } 153 MongoServer server = MongoServer.Create(connectionString); 154 //获取数据库或者创建数据库(不存在的话)。 155 MongoDatabase database = server.GetDatabase(databaseName); 156 using (server.RequestStart(database))//开始连接数据库。 157 { 158 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 159 result = myCollection.Update(query, update, UpdateFlags.Multi); 160 } 161 return result; 162 } 163 #endregion 164 #region 删除 165 public static SafeModeResult Delete(string collectionName, string _id) 166 { 167 return MongoDBHelper.Delete(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, _id); 168 } 169 public static SafeModeResult Delete(string connectionString, string databaseName, string collectionName, string _id) 170 { 171 SafeModeResult result; 172 ObjectId id; 173 if (!ObjectId.TryParse(_id, out id)) 174 { 175 return null; 176 } 177 MongoServer server = MongoServer.Create(connectionString); 178 //获取数据库或者创建数据库(不存在的话)。 179 MongoDatabase database = server.GetDatabase(databaseName); 180 using (server.RequestStart(database))//开始连接数据库。 181 { 182 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 183 result = myCollection.Remove(Query.EQ("_id", id)); 184 } 185 return result; 186 } 187 public static SafeModeResult DeleteAll(string collectionName) 188 { 189 return MongoDBHelper.DeleteAll(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, null); 190 } 191 /// <summary> 192 /// 193 /// </summary> 194 /// <param name="collectionName"></param> 195 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 196 /// <returns></returns> 197 public static SafeModeResult DeleteAll(string collectionName, IMongoQuery query) 198 { 199 return MongoDBHelper.DeleteAll(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query); 200 } 201 /// <summary> 202 /// 203 /// </summary> 204 /// <param name="connectionString"></param> 205 /// <param name="databaseName"></param> 206 /// <param name="collectionName"></param> 207 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 208 /// <returns></returns> 209 public static SafeModeResult DeleteAll(string connectionString, string databaseName, string collectionName, IMongoQuery query) 210 { 211 MongoServer server = MongoServer.Create(connectionString); 212 //获取数据库或者创建数据库(不存在的话)。 213 MongoDatabase database = server.GetDatabase(databaseName); 214 SafeModeResult result; 215 using (server.RequestStart(database))//开始连接数据库。 216 { 217 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 218 if (null == query) 219 { 220 result = myCollection.RemoveAll(); 221 } 222 else 223 { 224 result = myCollection.Remove(query); 225 } 226 } 227 return result; 228 } 229 #endregion 230 #region 获取单条信息 231 public static T GetOne<T>(string collectionName, string _id) 232 { 233 return MongoDBHelper.GetOne<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, _id); 234 } 235 public static T GetOne<T>(string connectionString, string databaseName, string collectionName, string _id) 236 { 237 T result = default(T); 238 ObjectId id; 239 if (!ObjectId.TryParse(_id, out id)) 240 { 241 return default(T); 242 } 243 MongoServer server = MongoServer.Create(connectionString); 244 //获取数据库或者创建数据库(不存在的话)。 245 MongoDatabase database = server.GetDatabase(databaseName); 246 using (server.RequestStart(database))//开始连接数据库。 247 { 248 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 249 result = myCollection.FindOneAs<T>(Query.EQ("_id", id)); 250 } 251 return result; 252 } 253 /// <summary> 254 /// 255 /// </summary> 256 /// <typeparam name="T"></typeparam> 257 /// <param name="collectionName"></param> 258 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 259 /// <returns></returns> 260 public static T GetOne<T>(string collectionName, IMongoQuery query) 261 { 262 return GetOne<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query); 263 } 264 /// <summary> 265 /// 266 /// </summary> 267 /// <typeparam name="T"></typeparam> 268 /// <param name="connectionString"></param> 269 /// <param name="databaseName"></param> 270 /// <param name="collectionName"></param> 271 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 272 /// <returns></returns> 273 public static T GetOne<T>(string connectionString, string databaseName, string collectionName, IMongoQuery query) 274 { 275 MongoServer server = MongoServer.Create(connectionString); 276 //获取数据库或者创建数据库(不存在的话)。 277 MongoDatabase database = server.GetDatabase(databaseName); 278 T result = default(T); 279 using (server.RequestStart(database))//开始连接数据库。 280 { 281 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 282 if (null == query) 283 { 284 result = myCollection.FindOneAs<T>(); 285 } 286 else 287 { 288 result = myCollection.FindOneAs<T>(query); 289 } 290 } 291 return result; 292 } 293 #endregion 294 #region 获取多个 295 public static List<T> GetAll<T>(string collectionName) 296 { 297 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName); 298 } 299 /// <summary> 300 /// 如果不清楚具体的数量,一般不要用这个函数。 301 /// </summary> 302 /// <typeparam name="T"></typeparam> 303 /// <param name="collectionName"></param> 304 /// <returns></returns> 305 public static List<T> GetAll<T>(string connectionString, string databaseName, string collectionName) 306 { 307 MongoServer server = MongoServer.Create(connectionString); 308 //获取数据库或者创建数据库(不存在的话)。 309 MongoDatabase database = server.GetDatabase(databaseName); 310 List<T> result = new List<T>(); 311 using (server.RequestStart(database))//开始连接数据库。 312 { 313 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 314 foreach (T entity in myCollection.FindAllAs<T>()) 315 { 316 result.Add(entity); 317 } 318 } 319 return result; 320 } 321 public static List<T> GetAll<T>(string collectionName, int count) 322 { 323 return MongoDBHelper.GetAll<T>(collectionName, count, null, null); 324 } 325 /// <summary> 326 /// 327 /// </summary> 328 /// <typeparam name="T"></typeparam> 329 /// <param name="collectionName"></param> 330 /// <param name="count"></param> 331 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 332 /// <returns></returns> 333 public static List<T> GetAll<T>(string collectionName, int count, IMongoQuery query) 334 { 335 return MongoDBHelper.GetAll<T>(collectionName, count, query, null); 336 } 337 /// <summary> 338 /// 339 /// </summary> 340 /// <typeparam name="T"></typeparam> 341 /// <param name="collectionName"></param> 342 /// <param name="count"></param> 343 /// <param name="sortBy">排序用的。调用示例:SortBy.Descending("Title") 或者 SortBy.Descending("Title").Ascending("Author")等等</param> 344 /// <returns></returns> 345 public static List<T> GetAll<T>(string collectionName, int count, IMongoSortBy sortBy) 346 { 347 return MongoDBHelper.GetAll<T>(collectionName, count, null, sortBy); 348 } 349 /// <summary> 350 /// 351 /// </summary> 352 /// <typeparam name="T"></typeparam> 353 /// <param name="collectionName"></param> 354 /// <param name="count"></param> 355 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 356 /// <param name="sortBy">排序用的。调用示例:SortBy.Descending("Title") 或者 SortBy.Descending("Title").Ascending("Author")等等</param> 357 /// <param name="fields">只返回所需要的字段的数据。调用示例:"Title" 或者 new string[] { "Title", "Author" }等等</param> 358 /// <returns></returns> 359 public static List<T> GetAll<T>(string collectionName, int count, IMongoQuery query, IMongoSortBy sortBy, params string[] fields) 360 { 361 var page = 1; 362 var pageSize = count; 363 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, page, pageSize, sortBy, fields); 364 } 365 /// <summary> 366 /// 367 /// </summary> 368 /// <typeparam name="T"></typeparam> 369 /// <param name="collectionName"></param> 370 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 371 /// <param name="pagerInfo"></param> 372 /// <returns></returns> 373 public static List<T> GetAll<T>(string collectionName, IMongoQuery query, int page, int pageSize) 374 { 375 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, page, pageSize, null); 376 } 377 /// <summary> 378 /// 379 /// </summary> 380 /// <typeparam name="T"></typeparam> 381 /// <param name="collectionName"></param> 382 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 383 /// <param name="pagerInfo"></param> 384 /// <param name="sortBy">排序用的。调用示例:SortBy.Descending("Title") 或者 SortBy.Descending("Title").Ascending("Author")等等</param> 385 /// <returns></returns> 386 public static List<T> GetAll<T>(string collectionName, IMongoQuery query, int page, int pageSize, IMongoSortBy sortBy) 387 { 388 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, page, pageSize, sortBy); 389 } 390 /// <summary> 391 /// 392 /// </summary> 393 /// <typeparam name="T"></typeparam> 394 /// <param name="collectionName"></param> 395 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 396 /// <param name="pagerInfo"></param> 397 /// <param name="fields">只返回所需要的字段的数据。调用示例:"Title" 或者 new string[] { "Title", "Author" }等等</param> 398 /// <returns></returns> 399 public static List<T> GetAll<T>(string collectionName, IMongoQuery query, int page, int pageSize, params string[] fields) 400 { 401 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, page, pageSize, null, fields); 402 } 403 /// <summary> 404 /// 405 /// </summary> 406 /// <typeparam name="T"></typeparam> 407 /// <param name="collectionName"></param> 408 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 409 /// <param name="pagerInfo"></param> 410 /// <param name="sortBy">排序用的。调用示例:SortBy.Descending("Title") 或者 SortBy.Descending("Title").Ascending("Author")等等</param> 411 /// <param name="fields">只返回所需要的字段的数据。调用示例:"Title" 或者 new string[] { "Title", "Author" }等等</param> 412 /// <returns></returns> 413 public static List<T> GetAll<T>(string collectionName, IMongoQuery query, int page, int pageSize, IMongoSortBy sortBy, params string[] fields) 414 { 415 return MongoDBHelper.GetAll<T>(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, query, page, pageSize, sortBy, fields); 416 } 417 /// <summary> 418 /// 419 /// </summary> 420 /// <typeparam name="T"></typeparam> 421 /// <param name="connectionString"></param> 422 /// <param name="databaseName"></param> 423 /// <param name="collectionName"></param> 424 /// <param name="query">条件查询。 调用示例:Query.Matches("Title", "感冒") 或者 Query.EQ("Title", "感冒") 或者Query.And(Query.Matches("Title", "感冒"),Query.EQ("Author", "yanc")) 等等</param> 425 /// <param name="pagerInfo"></param> 426 /// <param name="sortBy">排序用的。调用示例:SortBy.Descending("Title") 或者 SortBy.Descending("Title").Ascending("Author")等等</param> 427 /// <param name="fields">只返回所需要的字段的数据。调用示例:"Title" 或者 new string[] { "Title", "Author" }等等</param> 428 /// <returns></returns> 429 public static List<T> GetAll<T>(string connectionString, string databaseName, string collectionName, IMongoQuery query, int page, int pageSize, IMongoSortBy sortBy, params string[] fields) 430 { 431 MongoServer server = MongoServer.Create(connectionString); 432 //获取数据库或者创建数据库(不存在的话)。 433 MongoDatabase database = server.GetDatabase(databaseName); 434 List<T> result = new List<T>(); 435 using (server.RequestStart(database))//开始连接数据库。 436 { 437 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 438 MongoCursor<T> myCursor; 439 if (null == query) 440 { 441 myCursor = myCollection.FindAllAs<T>(); 442 } 443 else 444 { 445 myCursor = myCollection.FindAs<T>(query); 446 } 447 if (null != sortBy) 448 { 449 myCursor.SetSortOrder(sortBy); 450 } 451 if (null != fields) 452 { 453 myCursor.SetFields(fields); 454 } 455 foreach (T entity in myCursor.SetSkip((page - 1) * pageSize).SetLimit(pageSize))//.SetSkip(100).SetLimit(10)是指读取第一百条后的10条数据。 456 { 457 result.Add(entity); 458 } 459 } 460 return result; 461 } 462 #endregion 463 #region 索引 464 public static void CreateIndex(string collectionName, params string[] keyNames) 465 { 466 MongoDBHelper.CreateIndex(MongoDBHelper.connectionString_Default, MongoDBHelper.database_Default, collectionName, keyNames); 467 } 468 public static void CreateIndex(string connectionString, string databaseName, string collectionName, params string[] keyNames) 469 { 470 SafeModeResult result = null;// new SafeModeResult(); 471 if (null == keyNames) 472 { 473 return; 474 } 475 MongoServer server = MongoServer.Create(connectionString); 476 //获取数据库或者创建数据库(不存在的话)。 477 MongoDatabase database = server.GetDatabase(databaseName); 478 using (server.RequestStart(database))//开始连接数据库。 479 { 480 MongoCollection<BsonDocument> myCollection = database.GetCollection<BsonDocument>(collectionName); 481 if (!myCollection.IndexExists(keyNames)) 482 { 483 myCollection.EnsureIndex(keyNames); 484 } 485 } 486 } 487 #endregion 488 } 489 }