A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈君 金牌黑马   /  2014-9-1 23:12  /  1417 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这篇文章主要介绍了MongoDB入门教程之C#驱动操作实例,即C#中操作MongoDB数据的方法和代码示例,需要的朋友可以参考下
作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者,
因为提供了丰富的linq操作,相当方便。
官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。
samus驱动:https://github.com/samus/mongodb-csharp/downloads
下面就具体看看samus驱动,https://github.com/samus/mongodb-csharp/blob/master/examples/Simple/Main.cs上面提供了
一个简单的demo,大体上看看我们就知道怎么玩了。
一: 实践
1:我们建立一个Person实体,MongoAlias特性表示取别名,这里的ID值将会覆盖掉数据库自动生成的_id。

  1. #region 数据实体
  2. /// <summary>
  3. /// 数据实体
  4. /// </summary>
  5. public class Person
  6. {
  7. [MongoAlias("_id")]
  8. public string ID { get; set; }
  9. public string Name { get; set; }
  10. public int Age { get; set; }
  11. public DateTime CreateTime { get; set; }
  12. }
  13. #endregion
复制代码

2:初始化一些变量

  1. string connectionString = string.Empty;
  2. string databaseName = string.Empty;
  3. string collectionName = string.Empty;
  4. static MongodbHelper<T> mongodb;
  5. #region 初始化操作
  6. /// <summary>
  7. /// 初始化操作
  8. /// </summary>
  9. public MongodbHelper()
  10. {
  11. connectionString = "Server=127.0.0.1:2222";
  12. databaseName = "shopex";
  13. collectionName = "person";
  14. }
  15. #endregion
复制代码

3:为了方便T的继承类使用linq功能,我们还需要映射一下。

  1. #region 实现linq查询的映射配置
  2. /// <summary>
  3. /// 实现linq查询的映射配置
  4. /// </summary>
  5. public MongoConfiguration configuration
  6. {
  7. get
  8. {
  9. var config = new MongoConfigurationBuilder();
  10. config.Mapping(mapping =>
  11. {
  12. mapping.DefaultProfile(profile =>
  13. {
  14. profile.SubClassesAre(t => t.IsSubclassOf(typeof(T)));
  15. });
  16. mapping.Map<T>();
  17. mapping.Map<T>();
  18. });
  19. config.ConnectionString(connectionString);
  20. return config.BuildConfiguration();
  21. }
  22. }
  23. #endregion
复制代码

4:下面是一些基本的CURD的代码,跟写EF代码很类似,写起来好舒服。

  1. #region 插入操作
  2. /// <summary>
  3. /// 插入操作
  4. /// </summary>
  5. /// <param name="person"></param>
  6. /// <returns></returns>
  7. public void Insert(T t)
  8. {
  9. using (Mongo mongo = new Mongo(configuration))
  10. {
  11. try
  12. {
  13. mongo.Connect();
  14. var db = mongo.GetDatabase(databaseName);
  15. var collection = db.GetCollection<T>(collectionName);
  16. collection.Insert(t, true);
  17. mongo.Disconnect();
  18. }
  19. catch (Exception)
  20. {
  21. mongo.Disconnect();
  22. throw;
  23. }
  24. }
  25. }
  26. #endregion
  27. #region 更新操作
  28. /// <summary>
  29. /// 更新操作
  30. /// </summary>
  31. /// <param name="person"></param>
  32. /// <returns></returns>
  33. public void Update(T t, Expression<Func<T, bool>> func)
  34. {
  35. using (Mongo mongo = new Mongo(configuration))
  36. {
  37. try
  38. {
  39. mongo.Connect();
  40. var db = mongo.GetDatabase(databaseName);
  41. var collection = db.GetCollection<T>(collectionName);
  42. collection.Update<T>(t, func, true);
  43. mongo.Disconnect();
  44. }
  45. catch (Exception)
  46. {
  47. mongo.Disconnect();
  48. throw;
  49. }
  50. }
  51. }
  52. #endregion
  53. #region 获取集合
  54. /// <summary>
  55. ///获取集合
  56. /// </summary>
  57. /// <param name="person"></param>
  58. /// <returns></returns>
  59. public List<T> List(int pageIndex, int pageSize, Expression<Func<T, bool>> func, out int pageCount)
  60. {
  61. pageCount = 0;
  62. using (Mongo mongo = new Mongo(configuration))
  63. {
  64. try
  65. {
  66. mongo.Connect();
  67. var db = mongo.GetDatabase(databaseName);
  68. var collection = db.GetCollection<T>(collectionName);
  69. pageCount = Convert.ToInt32(collection.Count());
  70. var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1))
  71. .Take(pageSize).Select(i => i).ToList();
  72. mongo.Disconnect();
  73. return personList;
  74. }
  75. catch (Exception)
  76. {
  77. mongo.Disconnect();
  78. throw;
  79. }
  80. }
  81. }
  82. #endregion
  83. #region 读取单条记录
  84. /// <summary>
  85. ///读取单条记录
  86. /// </summary>
  87. /// <param name="person"></param>
  88. /// <returns></returns>
  89. public T Single(Expression<Func<T, bool>> func)
  90. {
  91. using (Mongo mongo = new Mongo(configuration))
  92. {
  93. try
  94. {
  95. mongo.Connect();
  96. var db = mongo.GetDatabase(databaseName);
  97. var collection = db.GetCollection<T>(collectionName);
  98. var single = collection.Linq().FirstOrDefault(func);
  99. mongo.Disconnect();
  100. return single;
  101. }
  102. catch (Exception)
  103. {
  104. mongo.Disconnect();
  105. throw;
  106. }
  107. }
  108. }
  109. #endregion
  110. #region 删除操作
  111. /// <summary>
  112. /// 删除操作
  113. /// </summary>
  114. /// <param name="person"></param>
  115. /// <returns></returns>
  116. public void Delete(Expression<Func<T, bool>> func)
  117. {
  118. using (Mongo mongo = new Mongo(configuration))
  119. {
  120. try
  121. {
  122. mongo.Connect();
  123. var db = mongo.GetDatabase(databaseName);
  124. var collection = db.GetCollection<T>(collectionName);
  125. //这个地方要注意,一定要加上T参数,否则会当作object类型处理
  126. //导致删除失败
  127. collection.Remove<T>(func);
  128. mongo.Disconnect();
  129. }
  130. catch (Exception)
  131. {
  132. mongo.Disconnect();
  133. throw;
  134. }
  135. }
  136. }
  137. #endregion
复制代码

5. 好,我们开一下2222端口,由于前前篇我已经把这个mongodb做成了服务,现在就直接连过去了,并做一下对Name的索引。 6. 一切准备妥当,我们做下基本的操作,比如这里我添加一千条数据,注意我开启的是安全模式,如果插入不成功,将会抛出异常。
<1> Add:

  1. static void Main(string[] args)
  2. {
  3. MongodbHelper<Person> helper = new MongodbHelper<Person>();
  4. //插入1000条数据
  5. for (int i = 0; i < 1000; i++)
  6. {
  7. helper.Insert(new Person()
  8. {
  9. ID = Guid.NewGuid().ToString(),
  10. Name = "jack" + i,
  11. Age = i,
  12. CreateTime = DateTime.Now
  13. });
  14. }
  15. Console.WriteLine("插入成功");
  16. Console.Read();
  17. }
复制代码

乍一看显示的数据以为有问题,为什么没有出现jack0或者jack999,不过find的一下后心情舒坦了。
<2> update: 这里就把jack941的名字改掉“mary”

  1. static void Main(string[] args)
  2. {
  3. MongodbHelper<Person> helper = new MongodbHelper<Person>();
  4. //修改jack941改成mary
  5. var single = helper.Single(i => i.Name == "jack941");
  6. single.Name = "mary";
  7. helper.Update(single, i => i.ID == single.ID);
  8. Console.WriteLine("修改成功");
  9. Console.Read();
  10. }
复制代码

<3>Delete: 删除mary这条记录

  1. static void Main(string[] args)
  2. {
  3. MongodbHelper<Person> helper = new MongodbHelper<Person>();
  4. //删除mary这个记录
  5. helper.Delete(i => i.Name == "mary");
  6. Console.WriteLine("删除成功");
  7. Console.Read();
  8. }
复制代码

<4> list操作: 这里我获取一下名字里面带9的人数列表

  1. static void Main(string[] args)
  2. {
  3. MongodbHelper<Person> helper = new MongodbHelper<Person>();
  4. int pagecount;
  5. //获取名字里面带9的人数
  6. var list = helper.List(1, 20, i => i.Name.Contains("9"), out pagecount);
  7. Console.Read();
  8. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马