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     } 

  • 相关阅读:
    使用node.js搭建本地服务器
    使用Vue前端框架实现知乎日报app
    Echarts的使用
    [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统
    [LeetCode] 249. Group Shifted Strings 分组偏移字符串
    [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
    [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列
    [LeetCode] 227. Basic Calculator II 基本计算器 II
    [LeetCode] 224. Basic Calculator 基本计算器
    [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
  • 原文地址:https://www.cnblogs.com/KenChen/p/2279938.html
Copyright © 2011-2022 走看看