用C#操作Mongodb(c#mongodb驱动)

MongoDB的C#驱动基于.Net 3.5的 必要用.net 3.5以上的框架

1.对数据库的操作主要还是增删改查 

2.了解c#操作mapreduce的语法


我们先布置驱动环境,再通过实例来了解一下相关操作语法。




方法一:驱动工程直接下载

https://github.com/mongodb/mongo-csharp-driver/downloads

下载驱动。驱动有两个文件

  1. MongoDB.Bson.dll
  2. MongoDB.Driver.dll

可以直接下载这两个驱动,或者遵守下载源码进行编译生成。下载的源码可以看些test例子


方法二:驱动源码下载后编译得到驱动工程

地址:

https://github.com/mongodb/mongo-csharp-driver





下载的是源代码,进行编译后就可以得到MongoDB.Bson.dll,MongoDB.Driver.dll这两个驱动。



驱动说明:

http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/

驱动说明中文翻译:

http://www.bwxxkj.com/a/jishuzhongxin/shujukukaifa/2013/0109/160953.html


驱动API说明:

http://api.mongodb.org/csharp/current/




下面通过实例操作来熟悉一下:


引入驱动

在新建的c#工程中添加这两个dll文件并引用它们,并且应用如下定名空间

至少要引用如下定名空间

using MongoDB.Bson; 
<span class="kwrd">using</span> MongoDB.Driver; 
用得比较多的命名空间

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using MongoDB.Driver.Builders;  
  2.   
  3. using MongoDB.Driver.GridFS;  
  4.   
  5. using MongoDB.Driver.Linq;  

可能用到的命名空间

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using MongoDB.Bson.IO;  
  2.   
  3. using MongoDB.Bson.Serialization;  
  4.   
  5. using MongoDB.Bson.Serialization.Attributes;  
  6.   
  7. using MongoDB.Bson.Serialization.Conventions;  
  8.   
  9. using MongoDB.Bson.Serialization.IdGenerators;  
  10.   
  11. using MongoDB.Bson.Serialization.Options;  
  12.   
  13. using MongoDB.Bson.Serialization.Serializers;  
  14.   
  15. using MongoDB.Driver.Wrappers;  


把这两文件复制进工程中


引用它们





添加命名空间




好 可以用了 下面开始进行操作



对mongodb的数据进行操作有两种方法:

1.先构造好类的结构,用这个结构操作数据。

2.直接操作数据。


插入数据:

方法一:

增加一个Student类,构建student的构造。



类的代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace mymongotest  
  7. {  
  8.     class  Student_Insert  
  9.     {  
  10.   
  11.        
  12.         public string 姓名{get;set;}  
  13.   
  14.         public string 学号{get;set;}  
  15.   
  16.         public Information[] 个人信息{get;set;}   
  17.   
  18.   
  19.   
  20.   
  21.   
  22.     }  
  23.     class Information   
  24.     {  
  25.   
  26.         public string Name { getset; }  
  27.   
  28.         public string Value { getset; }  
  29.       
  30.     }  
  31.   
  32. }  



引用命名空间:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using MongoDB.Bson.Serialization;  
  2. using MongoDB.Driver.Builders;  


插入按钮的代码:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.   private void button1_Click(object sender, EventArgs e)  
  2.         {  
  3.             MongoClient client;  
  4.             MongoServer server;  
  5.             MongoDatabase database;  
  6.   
  7.             var conStr = "mongodb://192.168.0.188";  
  8.             client = new MongoClient(conStr);  
  9.   
  10.             server = client.GetServer();  
  11.             database = server.GetDatabase("test");  
  12.             var coll = database.GetCollection("student");  
  13.   
  14.             var sInsert = @"{""姓名"":""刘备"",""学号"":""001"",  
  15. ""个人信息"":[  
  16. {""Name"":""性别"",""Value"":""""},  
  17. {""Name"":""班级"",""Value"":""1班""},  
  18. {""Name"":""专业"",""Value"":""物理""}  
  19. ]  
  20. }";  
  21.             var bd = BsonSerializer.Deserialize<Student_Insert>(sInsert);  
  22.             coll.Insert(bd);  
  23.   
  24.             MessageBox.Show("入库结束");  
  25.         }  

运行,点击插入按钮

用MongoVue查看结果



插入成功



方法二:


不构造类结构,直接创建文档插入数据。可以根据你的需要构造成不同的格式。

这里 我们构造跟方法一一样的格式:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.   MongoClient client;  
  2.             MongoServer server;  
  3.             MongoDatabase database;  
  4.   
  5.   
  6.             var conStr = "mongodb://192.168.0.188";  
  7.             client = new MongoClient(conStr);  
  8.   
  9.   
  10.             server = client.GetServer();  
  11.             database = server.GetDatabase("test");  
  12.             var coll = database.GetCollection("student");  
  13.   
  14.   
  15.   
  16.   
  17.   
  18.   
  19.             BsonDocument bd = new BsonDocument();  
  20.             bd.Add(new BsonElement("姓名""赵云"));  
  21.             bd.Add(new BsonElement("学号""002"));  
  22.            //个人信息格式构造一: bd.Add(new BsonDocument{{"个人信息",new BsonDocument{{"性别","男"},{"班级","1班"},{"专业","数学"}}}});  
  23.   
  24.   
  25.             /* 个人信息格式构造二:  
  26.               
  27.              BsonArray ba = new BsonArray(); 
  28.              
  29.             BsonDocument information = new BsonDocument(); 
  30.  
  31.  
  32.            information.Add(new  BsonElement("性别", "男")); 
  33.             information.Add(new  BsonElement("班级", "002")); 
  34.             information.Add(new  BsonElement("专业", "数学")); 
  35.  
  36.  
  37.  
  38.  
  39.             ba.Add(information); 
  40.             bd.Add(new BsonDocument("个人信息", ba)); 
  41.               
  42.             */  
  43.   
  44.   
  45.   
  46.   
  47.   
  48.   
  49.             //个人信息格式3  
  50.             //BsonArray ba = new BsonArray();  
  51.   
  52.   
  53.   
  54.   
  55.             //ba.Add(new BsonDocument("性别", "男"));  
  56.             //ba.Add(new BsonDocument("班级", "002"));  
  57.             //ba.Add(new BsonDocument("专业", "数学"));  
  58.   
  59.   
  60.             //bd.Add(new BsonDocument("个人信息", ba));  
  61.   
  62.   
  63.             //个人信息格式4  
  64.             BsonArray ba = new BsonArray();  
  65.   
  66.   
  67.   
  68.   
  69.             ba.Add(new BsonDocument { { "Name""性别" }, { "Value""男" } });  
  70.             ba.Add(new BsonDocument { { "Name""班级" }, { "Value""2班" } });  
  71.             ba.Add(new BsonDocument { { "Name""专业" }, { "Value""物理" } });  
  72.   
  73.   
  74.             bd.Add(new BsonDocument("个人信息", ba));  
  75.   
  76.   
  77.   
  78.   
  79.             coll.Insert(bd);  
  80.   
  81.   
  82.             MessageBox.Show("入库结束");  



结果如下:




插入成功




查询数据:

在已建的类Student代码里添加类结构:Student_Query

添加后类Student.cs的代码为:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace mymongotest  
  7. {  
  8.     class Student_Insert  
  9.     {  
  10.   
  11.     
  12.   
  13.         public string 姓名{get;set;}  
  14.   
  15.         public string 学号{get;set;}  
  16.   
  17.         public Information[] 个人信息{get;set;}   
  18.   
  19.   
  20.   
  21.   
  22.   
  23.     }  
  24.     class Information   
  25.     {  
  26.   
  27.         public string Name { getset; }  
  28.   
  29.         public string Value { getset; }  
  30.   
  31.   
  32.   
  33.       
  34.     }  
  35.   
  36.   
  37.    class Student_Query  
  38.    {  
  39.   
  40.   
  41.        public Object _id { getset; }  
  42.        public string 姓名 { getset; }  
  43.   
  44.        public string 学号 { getset; }  
  45.   
  46.        public Information[] 个人信息 { getset; }  
  47.   
  48.   
  49.   
  50.   
  51.   
  52.    }  
  53.   
  54. }  


情景一:通过索引值取数据----通常用于取上一条,下一条数据。(用到类结构)

在窗体下声明集合coll和浮标cucor:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MongoCollection<Student_Query> coll;  
  2.        MongoCursor<Student_Query> cursor;  
声明位置如图:





查询按钮的代码:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private void button3_Click(object sender, EventArgs e)  
  2.        {  
  3.            MongoClient client;  
  4.            MongoServer server;  
  5.            MongoDatabase database;  
  6.   
  7.            var conStr = "mongodb://192.168.0.188";  
  8.            client = new MongoClient(conStr);  
  9.   
  10.            server = client.GetServer();  
  11.            database = server.GetDatabase("test");  
  12.            coll = database.GetCollection< Student_Query>("student");  
  13.            cursor = coll.FindAll();  
  14.            var ex = cursor.ElementAt< Student_Query>(0);//取第一个数据  
  15.            string sResult = "";  
  16.            sResult = string.Format("{0}{1}{2}{3}{4}", ex.姓名, ex.学号, ex.个人信息[0].Value, ex.个人信息[1].Value, ex.个人信息[2].Value);  
  17.   
  18.            MessageBox.Show(sResult);  
  19.        }  

结果:





情景二:用条件查询

情景二方法一:(用类结构)

查询按钮代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MongoClient client;  
  2.            MongoServer server;  
  3.            MongoDatabase database;  
  4.   
  5.            var conStr = "mongodb://192.168.0.188";  
  6.            client = new MongoClient(conStr);  
  7.   
  8.            server = client.GetServer();  
  9.            database = server.GetDatabase("test");  
  10.         coll = database.GetCollection<Student_Query>("student");  
  11.   
  12.   
  13.        // var bs = coll.FindOne(Query.EQ("_id", new ObjectId("512c14c211f9d518809d8d0c")));  
  14.          var bs = coll.FindOne(Query.EQ("姓名""赵云"));  
  15.   
  16.            string sResult = "";  
  17.            sResult = string.Format("{0}{1}{2}{3}{4}", bs.姓名, bs.学号, bs.个人信息[0].Value, bs.个人信息[1].Value, bs.个人信息[2].Value);  
  18.   
  19.            MessageBox.Show(sResult);  


结果:



情景二方法二:(不用类结构)

查询按钮代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MongoClient client;  
  2.            MongoServer server;  
  3.            MongoDatabase database;  
  4.   
  5.            var conStr = "mongodb://192.168.0.188";  
  6.            client = new MongoClient(conStr);  
  7.   
  8.            server = client.GetServer();  
  9.            database = server.GetDatabase("test");  
  10.        var  coll = database.GetCollection("student");  
  11.   
  12.   
  13.        // var bs = coll.FindOne(Query.EQ("_id", new ObjectId("512c14c211f9d518809d8d0c")));  
  14.          var bs = coll.FindOne(Query.EQ("姓名""赵云"));  
  15.   
  16.            string sResult = "";  
  17.            sResult = string.Format("{0}{1}{2}{3}{4}", bs.AsBsonDocument["姓名"].ToString(), bs.AsBsonDocument["学号"].ToString(), bs.AsBsonDocument["个人信息"].AsBsonArray[0].AsBsonDocument["Value"].ToString(), bs.AsBsonDocument["个人信息"].AsBsonArray[1].AsBsonDocument["Value"].ToString(), bs.AsBsonDocument["个人信息"].AsBsonArray[2].AsBsonDocument["Value"].ToString());  
  18.   
  19.            MessageBox.Show(sResult);  


结果:


查询常用语句:

求文档长度

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var bs = coll.FindAll();  
  2.      string i=  bs.Count().ToString();  
求文档中数组长度
[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var bs = coll.FindOne(Query.EQ("姓名""赵云"));  
  2.   
  3.      string i = bs.AsBsonDocument["个人信息"].AsBsonArray.Count().ToString();  

文档中是否包含某个元素:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if (bs.AsBsonDocument.Contains("姓名"))  

 

遍历一个文档中的所有属性:

 

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. var bs = coll_fieldConnect.FindOne(Query.EQ("id", process_id));  
  2.                    StringBuilder sb = new StringBuilder();  
  3.                    foreach (BsonElement d in bs)  
  4.                    {  
  5.   
  6.                        
  7.   
  8.                         
  9.                            sb.AppendFormat("{0}:\t{1}\n", d.Name, d.Value);  
  10.                         
  11.                    }  
  12.                    richTextBox1.Text = sb.ToString();  


 



 

修改数据:

修改按钮代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <span style="color:#000099;">  </span>          MongoClient client;  
  2.             MongoServer server;  
  3.             MongoDatabase database;  
  4.   
  5.             var conStr = "mongodb://192.168.0.188";  
  6.             client = new MongoClient(conStr);  
  7.   
  8.             server = client.GetServer();  
  9.             database = server.GetDatabase("test");  
  10.             var coll = database.GetCollection("student");  
  11.   
  12.             BsonDocument bd = new BsonDocument();  
  13.             bd.Add(new BsonElement("姓名""赵云"));  
  14.             bd.Add(new BsonElement("学号""002"));  
  15.             BsonArray ba = new BsonArray();  
  16.   
  17.   
  18.             ba.Add(new BsonDocument { { "Name""性别" }, { "Value""男" } });  
  19.             ba.Add(new BsonDocument { { "Name""班级" }, { "Value""1班" } });  
  20.             ba.Add(new BsonDocument { { "Name""专业" }, { "Value""数学" } });  
  21.   
  22.             bd.Add(new BsonDocument("个人信息", ba));  
  23.   
  24.             IMongoQuery query = Query.EQ("学号""002");  
  25.   
  26.             coll.Update(query, new UpdateDocument(bd));  MessageBox.Show("修改结束");  


结果如下: 转专业班级成功




删除数据:

删除按妞的代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private void button2_Click(object sender, EventArgs e)  
  2.       {  
  3.            MongoClient client;  
  4.           MongoServer server;  
  5.           MongoDatabase database;  
  6.   
  7.           var conStr = "mongodb://192.168.0.188";  
  8.           client = new MongoClient(conStr);  
  9.   
  10.           server = client.GetServer();  
  11.           database = server.GetDatabase("test");  
  12.           var coll = database.GetCollection("student");  
  13.   
  14.             
  15.             
  16.             
  17.          IMongoQuery query = Query.EQ("学号""002");  
  18.   
  19.           coll.Remove(query);  
  20.           MessageBox.Show("删除结束");  
  21.   
  22.       }  

结果:


删除成功








2.对mapreduce的操作语法

我们先在mongovue中测试好要用的mapreduce

这里我们写一个统计文档数的mapreduce,详见mongodb mapreduce分析

得到结果为 文档数为1




用c#实现这个功能 按钮代码为:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.  private void button5_Click(object sender, EventArgs e)  
  2.         {  
  3.             MongoClient client;  
  4.             MongoServer server;  
  5.             MongoDatabase database;  
  6.   
  7.             var conStr = "mongodb://192.168.0.188";  
  8.             client = new MongoClient(conStr);  
  9.   
  10.             server = client.GetServer();  
  11.             database = server.GetDatabase("test");  
  12.             var coll = database.GetCollection("student");  
  13.   
  14.             BsonJavaScript map = new BsonJavaScript(@"  
  15. function map() {  
  16. emit(  
  17.     1,                    
  18.         {count: 1}  );  
  19. }");  
  20.             BsonJavaScript reduce = new BsonJavaScript(@"function(key,values){  
  21.     var total=0;  
  22.     values.forEach(function(val) {  
  23.         total   +=  val.count;    
  24.       
  25.     });  
  26. return total;  
  27. };");  
  28.   
  29.   
  30.   
  31.           var  result = coll.MapReduce(map, reduce);  
  32.           string count = "";  
  33.            foreach (var s in result.InlineResults)  
  34.            {  
  35.                count = s.AsBsonDocument["value"].AsBsonDocument["count"].ToString();  
  36.            }  
  37.   
  38.            MessageBox.Show(count);  
  39.         }  


结果:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值