MongoDB试水
最近在博客园经常看到关于mongodb的文章,闲暇时间自己也适用了一下,发现在某些方面用起来相当的简单,只要写一个类,再定义模型对象,其他的只要调用就OK了。
比如添加数据:
1 public static void Add<TModel>(TModel model)
2 {
3 var doc = BsonExtensionMethods.ToBsonDocument(model);
4 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
5 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
6 using (server.RequestStart(database))
7 {
8 var collection = database.GetCollection<TModel>(typeof(TModel).Name);
9 collection.Insert(doc);
10 }
11 }
调用示例:
1 User user = new User();
2 user.Password = "1234566";
3 user.UserName = "hao";
4 user.RegisterTime = DateTime.Now;
5 MongoInstance.Add<User>(user);
更新数据:
1 public static void Update<TModel>(TModel model, object id)
2 {
3 BsonDocument doc = BsonExtensionMethods.ToBsonDocument(model);
4 IList<BsonElement> elements = new List<BsonElement>();
5 foreach (var item in doc.Elements)
6 {
7 if (item.Value.IsBsonNull)
8 {
9 elements.Add(item);
10 }
11 }
12 foreach (var el in elements)
13 {
14 doc.RemoveElement(el);
15 }
16 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
17 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
18 using (server.RequestStart(database))
19 {
20 var collection = database.GetCollection(typeof(TModel).Name);
21 var query = new QueryDocument { { "_id", new BsonObjectId(id.ToString()) } };
22 var update = new UpdateDocument(doc);
23 collection.Update(query, update);
24 }
25 }
调用示例(不能设置Id):
1 MongoInstance.Update<User>(user, "4ddb06b73a0c080f4ccb6df5");
删除数据:
1 public static void Delete<TModel>(object id)
2 {
3 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
4 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
5 using (server.RequestStart(database))
6 {
7 var collection = database.GetCollection(typeof(TModel).Name);
8 var query = new QueryDocument("_id", new BsonObjectId(id.ToString()));
9 collection.Remove(query);
10 }
11 }
调用示例:
MongoInstance.Delete<User>("4ddb06b73a0c080f4ccb6df5");
根据Id获得对象数据:
1 public static TModel GetById<TModel>(object id)
2 {
3 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
4 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
5 using (server.RequestStart(database))
6 {
7 var query = new QueryDocument("_id", new BsonObjectId(id.ToString()));
8 var collection = database.GetCollection<TModel>(typeof(TModel).Name);
9 var m = collection.FindOne(query);
10 if (m != null)
11 return m;
12 }
13 return default(TModel);
14 }
调用示例:
1 MongoInstance.GetById<User>("4ddb06ac3a0c080f4ccb6df4");
获得全部数据:
1 public static IList<TModel> GetAll<TModel>()
2 {
3 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
4 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
5 using (server.RequestStart(database))
6 {
7 var employees = database.GetCollection<TModel>(typeof(TModel).Name);
8 return employees.FindAll().ToList();
9 }
10 }
调用示例:
MongoInstance.GetAll<User>();
分页:
1 public static IList<TModel> GetDataPaging<TModel>(int pageIndex, out int totalPage, int pageSize = 20)
2 {
3 totalPage = 0;
4 MongoServer server = MongoServer.Create(MongoConfig.ConnectionString);
5 MongoDatabase database = server.GetDatabase(MongoConfig.DataBase);
6 using (server.RequestStart(database))
7 {
8 var collection = database.GetCollection<TModel>(typeof(TModel).Name);
9 var result = collection.FindAll();
10 result.Skip = (pageIndex - 1) * pageSize;
11 result.Limit = pageSize;
12 return result.ToList();
13 }
14 }
调用示例:
1 MongoInstance.GetDataPaging<User>(2, out tPage, 2);
Tag mongodb试水
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架