作为系列的最后一篇,得要说说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 10 public string Name { get; set; } 11 12 public int Age { get; set; } 13 14 public DateTime CreateTime { get; set; } 15 } 16 #endregion
2:初始化一些变量
1 string connectionString = string.Empty; 2 3 string databaseName = string.Empty; 4 5 string collectionName = string.Empty; 6 7 static MongodbHelper<T> mongodb; 8 9 #region 初始化操作 10 /// <summary>11 /// 初始化操作 12 /// </summary>13 public MongodbHelper() 14 { 15 connectionString = "Server=127.0.0.1:2222"; 16 databaseName = "shopex"; 17 collectionName = "person"; 18 } 19 #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 11 config.Mapping(mapping => 12 { 13 mapping.DefaultProfile(profile => 14 { 15 profile.SubClassesAre(t => t.IsSubclassOf(typeof(T))); 16 }); 17 mapping.Map<T>(); 18 mapping.Map<T>(); 19 }); 20 21 config.ConnectionString(connectionString); 22 23 return config.BuildConfiguration(); 24 } 25 } 26 #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 15 var db = mongo.GetDatabase(databaseName); 16 17 var collection = db.GetCollection<T>(collectionName); 18 19 collection.Insert(t, true); 20 21 mongo.Disconnect(); 22 23 } 24 catch (Exception) 25 { 26 mongo.Disconnect(); 27 throw; 28 } 29 } 30 } 31 #endregion 32 33 #region 更新操作 34 /// <summary> 35 /// 更新操作 36 /// </summary> 37 /// <param name="person"></param> 38 /// <returns></returns> 39 public void Update(T t, Expression<Func<T, bool>> func) 40 { 41 using (Mongo mongo = new Mongo(configuration)) 42 { 43 try 44 { 45 mongo.Connect(); 46 47 var db = mongo.GetDatabase(databaseName); 48 49 var collection = db.GetCollection<T>(collectionName); 50 51 collection.Update<T>(t, func, true); 52 53 mongo.Disconnect(); 54 55 } 56 catch (Exception) 57 { 58 mongo.Disconnect(); 59 throw; 60 } 61 } 62 } 63 #endregion 64 65 #region 获取集合 66 /// <summary> 67 ///获取集合 68 /// </summary> 69 /// <param name="person"></param> 70 /// <returns></returns> 71 public List<T> List(int pageIndex, int pageSize, Expression<Func<T, bool>> func, out int pageCount) 72 { 73 pageCount = 0; 74 75 using (Mongo mongo = new Mongo(configuration)) 76 { 77 try 78 { 79 mongo.Connect(); 80 81 var db = mongo.GetDatabase(databaseName); 82 83 var collection = db.GetCollection<T>(collectionName); 84 85 pageCount = Convert.ToInt32(collection.Count()); 86 87 var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1)) 88 .Take(pageSize).Select(i => i).ToList(); 89 90 mongo.Disconnect(); 91 92 return personList; 93 94 } 95 catch (Exception) 96 { 97 mongo.Disconnect(); 98 throw; 99 } 100 } 101 } 102 #endregion 103 104 #region 读取单条记录 105 /// <summary>106 ///读取单条记录 107 /// </summary>108 /// <param name="person"></param>109 /// <returns></returns>110 public T Single(Expression<Func<T, bool>> func) 111 { 112 using (Mongo mongo = new Mongo(configuration)) 113 { 114 try 115 { 116 mongo.Connect(); 117 118 var db = mongo.GetDatabase(databaseName); 119 120 var collection = db.GetCollection<T>(collectionName); 121 122 var single = collection.Linq().FirstOrDefault(func); 123 124 mongo.Disconnect(); 125 126 return single; 127 128 } 129 catch (Exception) 130 { 131 mongo.Disconnect(); 132 throw; 133 } 134 } 135 } 136 #endregion 137 138 #region 删除操作 139 /// <summary>140 /// 删除操作 141 /// </summary>142 /// <param name="person"></param>143 /// <returns></returns>144 public void Delete(Expression<Func<T, bool>> func) 145 { 146 using (Mongo mongo = new Mongo(configuration)) 147 { 148 try 149 { 150 mongo.Connect(); 151 152 var db = mongo.GetDatabase(databaseName); 153 154 var collection = db.GetCollection<T>(collectionName); 155 156 //这个地方要注意,一定要加上T参数,否则会当作object类型处理 157 //导致删除失败158 collection.Remove<T>(func); 159 160 mongo.Disconnect(); 161 162 } 163 catch (Exception) 164 { 165 mongo.Disconnect(); 166 throw; 167 } 168 } 169 } 170 #endregion
5. 好,我们开一下2222端口,由于前前篇我已经把这个mongodb做成了服务,现在就直接连过去了,并做一下对Name的索引。
6. 一切准备妥当,我们做下基本的操作,比如这里我添加一千条数据,注意我开启的是安全模式,如果插入不成功,将会抛出异常。
<1> Add:
1 static void Main(string[] args) 2 { 3 MongodbHelper<Person> helper = new MongodbHelper<Person>(); 4 5 //插入1000条数据 6 for (int i = 0; i < 1000; i++) 7 { 8 helper.Insert(new Person() 9 { 10 ID = Guid.NewGuid().ToString(), 11 Name = "jack" + i, 12 Age = i, 13 CreateTime = DateTime.Now 14 }); 15 } 16 17 Console.WriteLine("插入成功"); 18 19 Console.Read(); 20 }
乍一看显示的数据以为有问题,为什么没有出现jack0或者jack999,不过find的一下后心情舒坦了。
<2> update: 这里就把jack941的名字改掉“mary”
1 static void Main(string[] args) 2 { 3 MongodbHelper<Person> helper = new MongodbHelper<Person>(); 4 5 //修改jack941改成mary 6 var single = helper.Single(i => i.Name == "jack941"); 7 single.Name = "mary"; 8 helper.Update(single, i => i.ID == single.ID); 9 10 Console.WriteLine("修改成功"); 11 Console.Read(); 12 }
<3>Delete: 删除mary这条记录
1 static void Main(string[] args) 2 { 3 MongodbHelper<Person> helper = new MongodbHelper<Person>(); 4 5 //删除mary这个记录 6 helper.Delete(i => i.Name == "mary"); 7 8 Console.WriteLine("删除成功"); 9 Console.Read(); 10 }
<4> list操作: 这里我获取一下名字里面带9的人数列表
1 static void Main(string[] args) 2 { 3 MongodbHelper<Person> helper = new MongodbHelper<Person>(); 4 5 int pagecount; 6 7 //获取名字里面带9的人数 8 var list = helper.List(1, 20, i => i.Name.Contains("9"), out pagecount); 9 10 Console.Read(); 11 }
总的运行代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Linq.Expressions; using MongoDB.Configuration; using MongoDB.Linq; using MongoDB.Attributes; namespace MongoDB.Test { public class MongodbHelper<T> where T : class { string connectionString = string.Empty; string databaseName = string.Empty; string collectionName = string.Empty; static MongodbHelper<T> mongodb; #region 初始化操作 /// <summary> /// 初始化操作 /// </summary> public MongodbHelper() { connectionString = "Server=127.0.0.1:2222"; databaseName = "shopex"; collectionName = "person"; } #endregion #region 实现linq查询的映射配置 /// <summary> /// 实现linq查询的映射配置 /// </summary> public MongoConfiguration configuration { get { var config = new MongoConfigurationBuilder(); config.Mapping(mapping => { mapping.DefaultProfile(profile => { profile.SubClassesAre(t => t.IsSubclassOf(typeof(T))); }); mapping.Map<T>(); mapping.Map<T>(); }); config.ConnectionString(connectionString); return config.BuildConfiguration(); } } #endregion #region 插入操作 /// <summary> /// 插入操作 /// </summary> /// <param name="person"></param> /// <returns></returns> public void Insert(T t) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(collectionName); collection.Insert(t, true); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw; } } } #endregion #region 更新操作 /// <summary> /// 更新操作 /// </summary> /// <param name="person"></param> /// <returns></returns> public void Update(T t, Expression<Func<T, bool>> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(collectionName); collection.Update<T>(t, func, true); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw; } } } #endregion #region 获取集合 /// <summary> ///获取集合 /// </summary> /// <param name="person"></param> /// <returns></returns> public List<T> List(int pageIndex, int pageSize, Expression<Func<T, bool>> func, out int pageCount) { pageCount = 0; using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(collectionName); pageCount = Convert.ToInt32(collection.Count()); var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex - 1)) .Take(pageSize).Select(i => i).ToList(); mongo.Disconnect(); return personList; } catch (Exception) { mongo.Disconnect(); throw; } } } #endregion #region 读取单条记录 /// <summary> ///读取单条记录 /// </summary> /// <param name="person"></param> /// <returns></returns> public T Single(Expression<Func<T, bool>> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(collectionName); var single = collection.Linq().FirstOrDefault(func); mongo.Disconnect(); return single; } catch (Exception) { mongo.Disconnect(); throw; } } } #endregion #region 删除操作 /// <summary> /// 删除操作 /// </summary> /// <param name="person"></param> /// <returns></returns> public void Delete(Expression<Func<T, bool>> func) { using (Mongo mongo = new Mongo(configuration)) { try { mongo.Connect(); var db = mongo.GetDatabase(databaseName); var collection = db.GetCollection<T>(collectionName); //这个地方要注意,一定要加上T参数,否则会当作object类型处理 //导致删除失败 collection.Remove<T>(func); mongo.Disconnect(); } catch (Exception) { mongo.Disconnect(); throw; } } } #endregion } #region 数据实体 /// <summary> /// 数据实体 /// </summary> public class Person { [MongoAlias("_id")] public string ID { get; set; } public string Name { get; set; } public int Age { get; set; } public DateTime CreateTime { get; set; } } #endregion }
相关推荐
MongoDB 是一个流行的开源、非关系型数据库管理系统,以其高性能、高可用性和可扩展性而闻名。本课程旨在帮助你在10天内掌握...通过实践和学习,你将能熟练掌握MongoDB的使用,为你的项目提供强大的数据存储解决方案。
本课程“10天掌握MongoDB”旨在帮助学习者快速上手MongoDB的基本操作,包括增删改查等核心功能。 在MongoDB中,添加文档(Insert)是非常直观的。当向集合中插入文档时,系统会检查是否指定了唯一的标识符`_id`。...
你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四...
"从MySQL到MongoDB——视觉中国的NoSQL之路" MySQL中的挑战 在传统的基于静态内容的产品中,MySQL使用Master+Master的部署方案,前端使用自己的PHP框架进行开发,Memcached作为缓存,Nginx进行Web服务器和负载...
MongoDB驱动
30分钟学MongoDB系列——性能优化和性能监控篇,主要聚焦于如何通过简单的步骤来优化MongoDB的性能和监控系统健康状态,以确保数据处理的高效性和系统的稳定性。 性能优化分为几个方面: 1. 索引:在MongoDB中,...
为了能够与MongoDB交互并执行各种数据库操作,首先需要通过官方提供的驱动程序或其他第三方库建立连接。 - **使用官方驱动程序连接**: - **Python环境下的连接方式**:推荐使用`pymongo`库。安装该库后,可以通过...
本教程的目的是在8天内帮助初学者掌握MongoDB的基础知识,第一天主要讲解入门内容。 首先,要开始学习MongoDB,你需要从官方网站下载适合你系统的安装包。MongoDB提供32位和64位版本,32位版本的最大存储限制是2GB...
MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...
标题提到的是 MongoDB 的 C# 驱动的最新版本——mongodb.driver.dll,具体为 2.12.0-beta1 版本。 MongoDB.Driver.dll 是 C# 驱动的核心组件,它包含了连接、查询、更新和操作 MongoDB 数据库所需的所有功能。这个...
mongodb必用驱动包架包jar包
MongoDB驱动jar包(MongoDB的Java连接包),3.7.0版本,适配MongDB 3.7.0及以下所有版本的MongoDB
通过深入学习和实践这些知识点,可以在8天内建立起对MongoDB的基本理解和操作技能。然而,全面掌握MongoDB还需要进一步研究其高级特性,如聚合框架、地理空间索引、GridFS文件存储等,以及在实际项目中的应用。
本系列教程旨在指导开发者学习MongoDB的高级查询与操作,帮助他们快速掌握MongoDB的CRUD(创建、读取、更新、删除)操作以及一些高级查询技巧。 ### 一、MongoDB的基础操作 #### 1.1 MongoDB的基本概念 MongoDB将...
这是一个java的mongodb的驱动包,使用它就能够与用java去连接mongodb服务器,和操作mongodb
MongoDB是当前流行的NoSQL数据库之一,它支持高性能、高可用性和易扩展的特性。在处理海量数据时,MongoDB提供了很多高级管理功能来确保数据的安全性和一致性。本篇将重点介绍MongoDB的安全机制和高级管理功能,包括...
在 .NET 开发环境中,C# 是一种常用的编程语言,为了与 MongoDB 进行交互,需要使用专门的 MongoDB .NET 驱动。本压缩包提供的是 MongoDB 的 C# 版驱动程序,版本为 1.7。 MongoDB.C# 驱动是官方支持的 .NET 库,它...
mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动