MongoDB 操作类的简单封装

前阵子一直在寻找MongoDB类似于SqlHelper的类库,但是没有能找到。于是自己就写了一个简单的封装,希望与喜欢的朋友一起分享!

提示:使用官方的C#驱动,基本的操作已经封装进去了,如果觉得封装的方法还不够用的话,那么自己再添加吧!

  1  public  sealed  class MongoDbM<T>  where T :  class
  2     {
  3          private MongoCollection<T> _mongoCollection;
  4          private MongoServer _mongoServer;
  5          private MongoDatabase _mongoDb;
  6 
  7          private  string _collectionName;
  8          public MongoDbM( string connString,  string dbName,  string collectionName)
  9         {
 10             _mongoServer = MongoServer.Create(connString);
 11             _mongoDb = _mongoServer.GetDatabase(dbName);
 12             _mongoCollection = _mongoDb.GetCollection<T>(collectionName);
 13             _collectionName = collectionName;
 14         }
 15 
 16          public  int Execute(Action<MongoCollection<T>> action)
 17         {
 18              int statusCode =  0;
 19              try
 20             {
 21                  // _mongoServer.Reconnect();
 22                  action(_mongoCollection);
 23                 statusCode =  1;
 24             }
 25              finally
 26             {
 27                 _mongoServer.Disconnect();
 28             }
 29              return statusCode;
 30         }
 31 
 32          public List<T> GetListNoPaging(BsonDocument fileds, BsonDocument greps, BsonDocument sorts)
 33         {
 34             List<T> dataList =  new List<T>();
 35             Execute( delegate(MongoCollection<T> mongoCollection)
 36             {
 37                 MongoCursor<T> dataCursor = mongoCollection.Find( new QueryDocument(greps))
 38                     .SetFields( new FieldsDocument(fileds))
 39                     .SetSortOrder( new SortByDocument(sorts));
 40                 dataList.AddRange(dataCursor.ToList());
 41             });
 42              return dataList;
 43         }
 44          public List<T> GetListPaging(BsonDocument fileds, BsonDocument greps, BsonDocument sorts,  int limit,  int skip,  out  long pageCount,  out  long rowCount)
 45         {
 46              long _rowcount =  0;
 47              long _pagecount =  0;
 48             List<T> dataList =  new List<T>();
 49             Execute( delegate(MongoCollection<T> mongoCollection)
 50             {
 51 
 52                 _rowcount = mongoCollection.Find( new QueryDocument(greps)).Count();
 53                 MongoCursor<T> dataCursor = mongoCollection.Find( new QueryDocument(greps))
 54                     .SetFields( new FieldsDocument(fileds))
 55                     .SetSortOrder( new SortByDocument(sorts))
 56                     .SetLimit(limit).SetSkip(skip);
 57                 _pagecount = _rowcount % limit ==  0 ? _rowcount / limit : _rowcount / limit +  1;
 58                 dataList.AddRange(dataCursor.ToList());
 59             });
 60             rowCount = _rowcount;
 61             pageCount = _pagecount;
 62              return dataList;
 63         }
 64 
 65          public  int Insert(T instance)
 66         {
 67              int resultCode =  0;
 68              string _id_instance = GetObjectId(instance);
 69             Execute( delegate(MongoCollection<T> mongoCollection)
 70             {
 71                 Func<T,  string> _getId =  new Func<T,  string>(GetObjectId);
 72                 QueryDocument query =  new QueryDocument( new BsonElement( " _id ", BsonValue.Create(_getId(instance))));
 73                  // o => _getId(o) == _id_instance
 74                  T temp = mongoCollection.FindOne(query);
 75                  if (temp ==  null)
 76                 {
 77                     mongoCollection.Insert(instance);
 78                     resultCode =  1;
 79                 }
 80             });
 81              return resultCode;
 82         }
 83 
 84          public T One(BsonDocument fileds, BsonDocument greps)
 85         {
 86             T resultInstance =  null;
 87             Execute( delegate(MongoCollection<T> mongoCollection)
 88             {
 89                 resultInstance = mongoCollection.Find( new QueryDocument(greps))
 90                       .SetFields( new FieldsDocument(fileds)).FirstOrDefault();
 91             });
 92              return resultInstance;
 93         }
 94 
 95          public  int Update(T instance)
 96         {
 97              int resultCode =  0;
 98             Execute( delegate(MongoCollection<T> mongoCollection)
 99             {
100                 Func<T,  string> _getId =  new Func<T,  string>(GetObjectId);
101                 QueryDocument query =  new QueryDocument( new BsonElement( " _id ", BsonValue.Create(_getId(instance))));
102                 SafeModeResult result = mongoCollection.Update(query,
103                      new UpdateDocument(BsonExtensionMethods.ToBsonDocument<T>(instance)));
104                 resultCode =  1;
105             });
106              return resultCode;
107         }
108 
109          private  string GetObjectId(T obj)
110         {
111             Type t =  typeof(T);
112             PropertyInfo propertyInfo = t.GetProperty( " _id ");
113              return propertyInfo.GetValue(obj,  null).ToString();
114         }

115     } 

转载于:https://www.cnblogs.com/KenChen/archive/2011/12/07/2279938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值