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     } 

posted @ 2011-12-07 21:53  Mr K  阅读(1562)  评论(0编辑  收藏  举报