1、引用MongoDB for C# Driver

从网上下载C#访问MongoDB的驱动,得到两个DLL:

  • MongoDB.Driver.dll
  • MongoDB.Bson.dll

将它们引用到项目中。

2、编写数据库访问帮助类

编写MongoDB访问帮助类MongoDbHelper:

  1. 1 using System;
  2. 2 using System.Collections.Generic;
  3. 3 using System.Linq;
  4. 4 using MongoDB.Bson;
  5. 5 using MongoDB.Driver;
  6. 6 using MongoDB.Driver.Builders;
  7. 7 using MongoDbTest.Models;
  8. 8
  9. 9 namespace MongoDbTest
  10. 10 {
  11. 11 /// <summary>
  12. 12 /// MongoDB帮助类
  13. 13 /// </summary>
  14. 14 internal static class MongoDbHepler
  15. 15 {
  16. 16 /// <summary>
  17. 17 /// 获取数据库实例对象
  18. 18 /// </summary>
  19. 19 /// <param name="connectionString">数据库连接串</param>
  20. 20 /// <param name="dbName">数据库名称</param>
  21. 21 /// <returns>数据库实例对象</returns>
  22. 22 private static MongoDatabase GetDatabase(string connectionString, string dbName)
  23. 23 {
  24. 24 var server = MongoServer.Create(connectionString);
  25. 25 return server.GetDatabase(dbName);
  26. 26 }
  27. 27
  28. 28 #region 新增
  29. 29
  30. 30 /// <summary>
  31. 31 /// 插入一条记录
  32. 32 /// </summary>
  33. 33 /// <typeparam name="T">数据类型</typeparam>
  34. 34 /// <param name="connectionString">数据库连接串</param>
  35. 35 /// <param name="dbName">数据名称</param>
  36. 36 /// <param name="collectionName">集合名称</param>
  37. 37 /// <param name="model">数据对象</param>
  38. 38 public static void Insert<T>(string connectionString, string dbName, string collectionName, T model) where T : EntityBase
  39. 39 {
  40. 40 if (model == null)
  41. 41 {
  42. 42 throw new ArgumentNullException("model", "待插入数据不能为空");
  43. 43 }
  44. 44 var db = GetDatabase(connectionString, dbName);
  45. 45 var collection = db.GetCollection<T>(collectionName);
  46. 46 collection.Insert(model);
  47. 47 }
  48. 48
  49. 49 #endregion
  50. 50
  51. 51 #region 更新
  52. 52
  53. 53 /// <summary>
  54. 54 /// 更新数据
  55. 55 /// </summary>
  56. 56 /// <param name="connectionString">数据库连接串</param>
  57. 57 /// <param name="dbName">数据库名称</param>
  58. 58 /// <param name="collectionName">集合名称</param>
  59. 59 /// <param name="query">查询条件</param>
  60. 60 /// <param name="dictUpdate">更新字段</param>
  61. 61 public static void Update(string connectionString, string dbName, string collectionName, IMongoQuery query, Dictionary<string, BsonValue> dictUpdate)
  62. 62 {
  63. 63 var db = GetDatabase(connectionString, dbName);
  64. 64 var collection = db.GetCollection(collectionName);
  65. 65 var update = new UpdateBuilder();
  66. 66 if (dictUpdate != null && dictUpdate.Count > 0)
  67. 67 {
  68. 68 foreach (var item in dictUpdate)
  69. 69 {
  70. 70 update.Set(item.Key, item.Value);
  71. 71 }
  72. 72 }
  73. 73 var d = collection.Update(query, update, UpdateFlags.Multi);
  74. 74 }
  75. 75
  76. 76 #endregion
  77. 77
  78. 78 #region 查询
  79. 79
  80. 80 /// <summary>
  81. 81 /// 根据ID获取数据对象
  82. 82 /// </summary>
  83. 83 /// <typeparam name="T">数据类型</typeparam>
  84. 84 /// <param name="connectionString">数据库连接串</param>
  85. 85 /// <param name="dbName">数据库名称</param>
  86. 86 /// <param name="collectionName">集合名称</param>
  87. 87 /// <param name="id">ID</param>
  88. 88 /// <returns>数据对象</returns>
  89. 89 public static T GetById<T>(string connectionString, string dbName, string collectionName, ObjectId id)
  90. 90 where T : EntityBase
  91. 91 {
  92. 92 var db = GetDatabase(connectionString, dbName);
  93. 93 var collection = db.GetCollection<T>(collectionName);
  94. 94 return collection.FindOneById(id);
  95. 95 }
  96. 96
  97. 97 /// <summary>
  98. 98 /// 根据查询条件获取一条数据
  99. 99 /// </summary>
  100. 100 /// <typeparam name="T">数据类型</typeparam>
  101. 101 /// <param name="connectionString">数据库连接串</param>
  102. 102 /// <param name="dbName">数据库名称</param>
  103. 103 /// <param name="collectionName">集合名称</param>
  104. 104 /// <param name="query">查询条件</param>
  105. 105 /// <returns>数据对象</returns>
  106. 106 public static T GetOneByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
  107. 107 where T : EntityBase
  108. 108 {
  109. 109 var db = GetDatabase(connectionString, dbName);
  110. 110 var collection = db.GetCollection<T>(collectionName);
  111. 111 return collection.FindOne(query);
  112. 112 }
  113. 113
  114. 114 /// <summary>
  115. 115 /// 根据查询条件获取多条数据
  116. 116 /// </summary>
  117. 117 /// <typeparam name="T">数据类型</typeparam>
  118. 118 /// <param name="connectionString">数据库连接串</param>
  119. 119 /// <param name="dbName">数据库名称</param>
  120. 120 /// <param name="collectionName">集合名称</param>
  121. 121 /// <param name="query">查询条件</param>
  122. 122 /// <returns>数据对象集合</returns>
  123. 123 public static List<T> GetManyByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
  124. 124 where T : EntityBase
  125. 125 {
  126. 126 var db = GetDatabase(connectionString, dbName);
  127. 127 var collection = db.GetCollection<T>(collectionName);
  128. 128 return collection.Find(query).ToList();
  129. 129 }
  130. 130
  131. 131 /// <summary>
  132. 132 /// 根据集合中的所有数据
  133. 133 /// </summary>
  134. 134 /// <typeparam name="T">数据类型</typeparam>
  135. 135 /// <param name="connectionString">数据库连接串</param>
  136. 136 /// <param name="dbName">数据库名称</param>
  137. 137 /// <param name="collectionName">集合名称</param>
  138. 138 /// <returns>数据对象集合</returns>
  139. 139 public static List<T> GetAll<T>(string connectionString, string dbName, string collectionName)
  140. 140 where T : EntityBase
  141. 141 {
  142. 142 var db = GetDatabase(connectionString, dbName);
  143. 143 var collection = db.GetCollection<T>(collectionName);
  144. 144 return collection.FindAll().ToList();
  145. 145 }
  146. 146
  147. 147 #endregion
  148. 148
  149. 149 #region 删除
  150. 150
  151. 151 /// <summary>
  152. 152 /// 删除集合中符合条件的数据
  153. 153 /// </summary>
  154. 154 /// <param name="connectionString">数据库连接串</param>
  155. 155 /// <param name="dbName">数据库名称</param>
  156. 156 /// <param name="collectionName">集合名称</param>
  157. 157 /// <param name="query">查询条件</param>
  158. 158 public static void DeleteByCondition(string connectionString, string dbName, string collectionName, IMongoQuery query)
  159. 159 {
  160. 160 var db = GetDatabase(connectionString, dbName);
  161. 161 var collection = db.GetCollection(collectionName);
  162. 162 collection.Remove(query);
  163. 163 }
  164. 164
  165. 165 /// <summary>
  166. 166 /// 删除集合中的所有数据
  167. 167 /// </summary>
  168. 168 /// <param name="connectionString">数据库连接串</param>
  169. 169 /// <param name="dbName">数据库名称</param>
  170. 170 /// <param name="collectionName">集合名称</param>
  171. 171 public static void DeleteAll(string connectionString, string dbName, string collectionName)
  172. 172 {
  173. 173 var db = GetDatabase(connectionString, dbName);
  174. 174 var collection = db.GetCollection(collectionName);
  175. 175 collection.RemoveAll();
  176. 176 }
  177. 177
  178. 178 #endregion
  179. 179
  180. 180 }
  181. 181 }

3、编写测试类

(1)配置数据库参数

在配置文件中编写数据库连接串和数据库名称。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <appSettings>
  4. <!--MongoDB数据库连接串-->
  5. <add key="MongoDBConn" value="mongodb://127.0.0.1:27017"/>
  6. <!--MongoDB数据库名称-->
  7. <add key="MongoDBName" value="mydb"/>
  8. </appSettings>
  9. <startup>
  10. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  11. </startup>
  12. </configuration>

将其写入C#代码中:

  1. using System.Configuration;
  2.  
  3. namespace MongoDbTest
  4. {
  5. /// <summary>
  6. /// 数据库配置参数
  7. /// </summary>
  8. internal static class DbConfigParams
  9. {
  10. private static string _conntionString = ConfigurationManager.AppSettings["MongoDBConn"];
  11.  
  12. /// <summary>
  13. /// 获取 数据库连接串
  14. /// </summary>
  15. public static string ConntionString
  16. {
  17. get { return _conntionString; }
  18. }
  19.  
  20. private static string _dbName = ConfigurationManager.AppSettings["MongoDBName"];
  21.  
  22. /// <summary>
  23. /// 获取 数据库名称
  24. /// </summary>
  25. public static string DbName
  26. {
  27. get { return _dbName; }
  28. }
  29. }
  30. }

另外,将集合名称写到C#代码中作为字符串常量:

  1. namespace MongoDbTest
  2. {
  3. public class CollectionNames
  4. {
  5. public const string User = "User";
  6.  
  7. public const string Student = "Student";
  8. }
  9. }

(2)编写实体类

首先,编写实体基类,其中含有默认的Id:

  1. using MongoDB.Bson;
  2. using MongoDB.Bson.Serialization.Attributes;
  3.  
  4. namespace MongoDbTest.Models
  5. {
  6. /// <summary>
  7. /// 实体基类
  8. /// </summary>
  9. public class EntityBase
  10. {
  11. /// <summary>
  12. /// 主键
  13. /// </summary>
  14. [BsonId]
  15. public ObjectId Id { get; set; }
  16. }
  17. }

然后,编写实体类:

  1. namespace MongoDbTest.Models
  2. {
  3. /// <summary>
  4. /// 学生类
  5. /// </summary>
  6. public class Student : EntityBase
  7. {
  8. /// <summary>
  9. /// 获取 姓名
  10. /// </summary>
  11. public string Name { get; set; }
  12.  
  13. /// <summary>
  14. /// 获取 年龄
  15. /// </summary>
  16. public int Age { get; set; }
  17.  
  18. /// <summary>
  19. /// 获取 状态
  20. /// </summary>
  21. public State State { get; set; }
  22. }
  23. }

其中,State枚举类定义如下:

  1. namespace MongoDbTest.Models
  2. {
  3. /// <summary>
  4. /// 状态
  5. /// </summary>
  6. public enum State
  7. {
  8. /// <summary>
  9. /// 全部
  10. /// </summary>
  11. All = ,
  12.  
  13. /// <summary>
  14. /// 正常
  15. /// </summary>
  16. Normal = ,
  17.  
  18. /// <summary>
  19. /// 未使用
  20. /// </summary>
  21. Unused = ,
  22. }
  23. }

(3)编写测试代码

在主程序中编写测试代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using MongoDB.Bson;
  4. using MongoDB.Driver.Builders;
  5. using MongoDbTest.Models;
  6.  
  7. namespace MongoDbTest
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Console.Title = "Mongo DB Test";
  14. InsertTest();
  15. //QueryTest();
  16. //UpdateTest();
  17. DeleteTest();
  18.  
  19. Console.WriteLine("Finish!");
  20.  
  21. Console.ReadLine();
  22. }
  23.  
  24. /// <summary>
  25. /// 插入数据测试
  26. /// </summary>
  27. static void InsertTest()
  28. {
  29. var random = new Random();
  30. for (var i = ; i <= ; i++)
  31. {
  32. var item = new Student()
  33. {
  34. Name = "我的名字" + i,
  35. Age = random.Next(, ),
  36. State = i% == ? State.Normal : State.Unused
  37. };
  38. MongoDbHepler.Insert(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, item);
  39. }
  40. }
  41.  
  42. /// <summary>
  43. /// 查询测试
  44. /// </summary>
  45. static void QueryTest()
  46. {
  47. var queryBuilder = new QueryBuilder<Student>();
  48. var query = queryBuilder.GTE(x => x.Age, );
  49. var ltModel = MongoDbHepler.GetManyByCondition<Student>(DbConfigParams.ConntionString, DbConfigParams.DbName,
  50. CollectionNames.Student, query);
  51. if (ltModel != null && ltModel.Count > )
  52. {
  53. foreach (var item in ltModel)
  54. {
  55. Console.WriteLine("姓名:{0},年龄:{1},状态:{2}",
  56. item.Name, item.Age, GetStateDesc(item.State));
  57. }
  58. }
  59. }
  60.  
  61. /// <summary>
  62. /// 更新测试
  63. /// </summary>
  64. static void UpdateTest()
  65. {
  66. var queryBuilder = new QueryBuilder<Student>();
  67. var query = queryBuilder.GTE(x => x.Age, );
  68. var dictUpdate = new Dictionary<string, BsonValue>();
  69. dictUpdate["State"] = State.Unused;
  70. MongoDbHepler.Update(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, query,
  71. dictUpdate);
  72. }
  73.  
  74. /// <summary>
  75. /// 删除测试
  76. /// </summary>
  77. static void DeleteTest()
  78. {
  79. var queryBuilder = new QueryBuilder<Student>();
  80. var query = queryBuilder.GTE(x => x.Age, );
  81. MongoDbHepler.DeleteByCondition(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, query);
  82. }
  83.  
  84. /// <summary>
  85. /// 获取状态描述
  86. /// </summary>
  87. /// <param name="state">状态</param>
  88. /// <returns>状态描述</returns>
  89. static string GetStateDesc(State state)
  90. {
  91. string result = string.Empty;
  92. switch (state)
  93. {
  94. case State.All:
  95. result = "全部";
  96. break;
  97. case State.Normal:
  98. result = "正常";
  99. break;
  100. case State.Unused:
  101. result = "未使用";
  102. break;
  103. default:
  104. throw new ArgumentOutOfRangeException("state");
  105. }
  106. return result;
  107. }
  108. }
  109. }

monogodb中where条件操作符号

  1. Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
  2. Query.EQ("name", "a");//等于
  3. Query.Exists("type", true);//判断键值是否存在
  4. Query.GT("value", 2);//大于>
  5. Query.GTE("value", 3);//大于等于>=
  6. Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
  7. Query.LT("value", 9);//小于<
  8. Query.LTE("value", 8);//小于等于<=
  9. Query.Mod("value", 3, 1);//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
  10. Query.NE("name", "c");//不等于
  11. Query.Nor(Array);//不包括数组中的值
  12. Query.Not("name");//元素条件语句
  13. Query.NotIn("name", "a", 2);//返回与数组中所有条件都不匹配的文档
  14. Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
  15. Query.Size("name", 2);//给定键的长度
  16. Query.Type("_id", BsonType.ObjectId );//给定键的类型
  17. Query.Where(BsonJavaScript);//执行JavaScript
  18. Query.Matches("Title",str);//模糊查询 相当于sql中like -- str可包含正则表达式

MangoDB CSharp Driver的更多相关文章

  1. c#操作MangoDB 之MangoDB CSharp Driver驱动详解

    序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...

  2. Getting Started with the C# Driver

    1.下载 如果下载的.zip文件,只需要解压即可. 如果安装的.msi文件,它会将C#驱动DLL放在C:\Program Files (x86)\MongoDB\CSharp Driver xxx的位 ...

  3. MongoDB--CSharp Driver Quickstart .

    原文链接 http://www.mongodb.org/display/DOCS/CSharp+Driver+Quickstart?showComments=true&showCommentA ...

  4. MangoDB在C#中的使用

    http://blog.sina.com.cn/s/blog_927f3c2401011937.html 图形工具 http://api.mongodb.org/csharp/current/html ...

  5. MongoDB数据访问[C#]附源码下载(查询增删改) 转载

    安装完MongoDBhttp://localhost:28017/监测是否成功! vs 2008 C# MongoDB 源代码下载地址:http://download.csdn.net/source/ ...

  6. mongodb学习(翻译1)

    学习mongodb,试着翻译写,英语能力有限,希望大家指正,不顺畅地方大家担待,会后续翻译后面内容: 开始认识C#驱动(官方) 简介 本介绍提供了足够的信息,让你开始使用C#的驱动程序.起步之后,你可 ...

  7. C# MongoDB 查询,分组,聚合,排序,条件,分页

    先下载个C#的驱动.MongoDB提供各种主流与非主流预言的开发驱动. C# Driver 下载地址:这里 CSharp Driver Tutorial:这里 下载文件安装或者解压缩包 如果您是安装, ...

  8. Using MongoDB with Web API and ASP.NET Core

    MongoDB is a NoSQL document-oriented database that allows you to define JSON based documents which a ...

  9. (转)mongodb学习(翻译1)

    原文地址:http://www.cnblogs.com/Johnzhang/archive/2013/09/10/3313582.html 学习mongodb,试着翻译写,英语能力有限,希望大家指正, ...

随机推荐

  1. java Annotation 注解的使用

    源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...

  2. vue 自定义 提示框(Toast)组件

    1.自定义 提示框 组件 src / components / Toast / index.js /** * 自定义 提示框( Toast )组件 */ var Toast = {}; var sho ...

  3. 网络编程三要素之IP

    用来标示我们计算机在互联网上的唯一性 每个设备在网络中的唯一标识 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址. ipconfig:查看本机IP192.168.12.4 ...

  4. 如何用CSS3来实现卡片的翻转特效

    CSS3实现翻转(Flip)效果 动画效果 效果分析 当鼠标滑过包含块时,元素整体翻转180度,以实现“正”“反”面的切换. HTML分析 分析:.container,.flip为了实现动画效果做准备 ...

  5. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_02-自定义查询页面-服务端-接口开发

    在Service中实现自定义查询 StringUtils.isNotEmpty()是这个包下的org.apache.commons.lang3.StringUtils; 再设置其他的条件 定义Exam ...

  6. Python xlwt 模块执行出错Exception: String longer than 32767 characters

    使用Python搜集数据时用到xlwt保存到excel文件,但是数据量有点大时出现 Exception: String longer than 32767 characters 搜索类似的问题都是建议 ...

  7. PAT 甲级 1029 Median (25 分)(思维题,找两个队列的中位数,没想到)*

    1029 Median (25 分)   Given an increasing sequence S of N integers, the median is the number at the m ...

  8. PAT 甲级 1012 The Best Rank (25 分)(结构体排序)

    题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...

  9. Reveal v4(8796) 使用

    文件下载地址   http://xclient.info/s/reveal.html dmg安装成功后, pod install  植入项目. pod 'Reveal-SDK', '~> 4', ...

  10. Windows下Tesseract-OCR的安装

    可以去Github查看tesseract-ocr的信息:https://github.com/tesseract-ocr/tesseract 在写这篇随笔的时候(2018年8月21日)最新版本是3.0 ...