meimei10251314 发表于 2015-7-6 10:44:46

MongoDB 操作类的简单封装

  前阵子一直在寻找MongoDB类似于SqlHelper的类库,但是没有能找到。于是自己就写了一个简单的封装,希望与喜欢的朋友一起分享!
  提示:使用官方的C#驱动,基本的操作已经封装进去了,如果觉得封装的方法还不够用的话,那么自己再添加吧!


1 public sealed class MongoDbM where T : class
2   {
3         private MongoCollection _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(collectionName);
13             _collectionName = collectionName;
14         }
15
16         public int Execute(Action 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 GetListNoPaging(BsonDocument fileds, BsonDocument greps, BsonDocument sorts)
33         {
34             List dataList = new List();
35             Execute(delegate(MongoCollection mongoCollection)
36             {
37               MongoCursor 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 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 dataList = new List();
49             Execute(delegate(MongoCollection mongoCollection)
50             {
51
52               _rowcount = mongoCollection.Find(new QueryDocument(greps)).Count();
53               MongoCursor 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 mongoCollection)
70             {
71               Func _getId = new Func(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 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 mongoCollection)
99             {
100               Func _getId = new Func(GetObjectId);
101               QueryDocument query = new QueryDocument(new BsonElement("_id", BsonValue.Create(_getId(instance))));
102               SafeModeResult result = mongoCollection.Update(query,
103                     new UpdateDocument(BsonExtensionMethods.ToBsonDocument(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   }
页: [1]
查看完整版本: MongoDB 操作类的简单封装