zoukankan      html  css  js  c++  java
  • 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     } 

  • 相关阅读:
    [BZOJ3160]万径人踪灭
    [BZOJ5212][ZJOI2018]历史
    [BZOJ3563&3569]DZY Loves Chinese
    [HDU4336]Card Collector
    [HDU4652]Dice
    [POJ3683]Priest John's Busiest Day
    ISODateTimeFormat 转换2019-08-15T00:36:49.366456463Z 日期格式
    GoTTY-K8S-Docker 终端
    【php】PHP对redis操作详解
    【tool】VLC播放rtmp协议
  • 原文地址:https://www.cnblogs.com/KenChen/p/2279938.html
Copyright © 2011-2022 走看看