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 }
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 }