用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


用C#操作Mongodb(c#mongodb驱动)_第1张图片



下载的是源代码,进行编译后就可以得到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; 
using MongoDB.Driver; 
用得比较多的命名空间

using MongoDB.Driver.Builders;

using MongoDB.Driver.GridFS;

using MongoDB.Driver.Linq;

可能用到的命名空间

using MongoDB.Bson.IO;

using MongoDB.Bson.Serialization;

using MongoDB.Bson.Serialization.Attributes;

using MongoDB.Bson.Serialization.Conventions;

using MongoDB.Bson.Serialization.IdGenerators;

using MongoDB.Bson.Serialization.Options;

using MongoDB.Bson.Serialization.Serializers;

using MongoDB.Driver.Wrappers;


把这两文件复制进工程中
用C#操作Mongodb(c#mongodb驱动)_第2张图片


引用它们

用C#操作Mongodb(c#mongodb驱动)_第3张图片


用C#操作Mongodb(c#mongodb驱动)_第4张图片



添加命名空间

用C#操作Mongodb(c#mongodb驱动)_第5张图片



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

用C#操作Mongodb(c#mongodb驱动)_第6张图片


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

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

2.直接操作数据。


插入数据:

方法一:

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

用C#操作Mongodb(c#mongodb驱动)_第7张图片

用C#操作Mongodb(c#mongodb驱动)_第8张图片

类的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mymongotest
{
    class  Student_Insert
    {

     
        public string 姓名{get;set;}

        public string 学号{get;set;}

        public Information[] 个人信息{get;set;} 





    }
    class Information 
    {

        public string Name { get; set; }

        public string Value { get; set; }
    
    }

}



引用命名空间:

using MongoDB.Bson.Serialization;
using MongoDB.Driver.Builders;


插入按钮的代码:

  private void button1_Click(object sender, EventArgs e)
        {
            MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
            var coll = database.GetCollection("student");

            var sInsert = @"{""姓名"":""刘备"",""学号"":""001"",
""个人信息"":[
{""Name"":""性别"",""Value"":""男""},
{""Name"":""班级"",""Value"":""1班""},
{""Name"":""专业"",""Value"":""物理""}
]
}";
            var bd = BsonSerializer.Deserialize<Student_Insert>(sInsert);
            coll.Insert(bd);

            MessageBox.Show("入库结束");
        }

运行,点击插入按钮

用MongoVue查看结果

用C#操作Mongodb(c#mongodb驱动)_第9张图片


插入成功



方法二:


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

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

  MongoClient client;
            MongoServer server;
            MongoDatabase database;


            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);


            server = client.GetServer();
            database = server.GetDatabase("test");
            var coll = database.GetCollection("student");






            BsonDocument bd = new BsonDocument();
            bd.Add(new BsonElement("姓名", "赵云"));
            bd.Add(new BsonElement("学号", "002"));
           //个人信息格式构造一: bd.Add(new BsonDocument{{"个人信息",new BsonDocument{{"性别","男"},{"班级","1班"},{"专业","数学"}}}});


            /* 个人信息格式构造二: 
             
             BsonArray ba = new BsonArray();
            
            BsonDocument information = new BsonDocument();


           information.Add(new  BsonElement("性别", "男"));
            information.Add(new  BsonElement("班级", "002"));
            information.Add(new  BsonElement("专业", "数学"));




            ba.Add(information);
            bd.Add(new BsonDocument("个人信息", ba));
             
            */






            //个人信息格式3
            //BsonArray ba = new BsonArray();




            //ba.Add(new BsonDocument("性别", "男"));
            //ba.Add(new BsonDocument("班级", "002"));
            //ba.Add(new BsonDocument("专业", "数学"));


            //bd.Add(new BsonDocument("个人信息", ba));


            //个人信息格式4
            BsonArray ba = new BsonArray();




            ba.Add(new BsonDocument { { "Name", "性别" }, { "Value", "男" } });
            ba.Add(new BsonDocument { { "Name", "班级" }, { "Value", "2班" } });
            ba.Add(new BsonDocument { { "Name", "专业" }, { "Value", "物理" } });


            bd.Add(new BsonDocument("个人信息", ba));




            coll.Insert(bd);


            MessageBox.Show("入库结束");



结果如下:

用C#操作Mongodb(c#mongodb驱动)_第10张图片



插入成功




查询数据:

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mymongotest
{
    class Student_Insert
    {

  

        public string 姓名{get;set;}

        public string 学号{get;set;}

        public Information[] 个人信息{get;set;} 





    }
    class Information 
    {

        public string Name { get; set; }

        public string Value { get; set; }



    
    }


   class Student_Query
   {


       public Object _id { get; set; }
       public string 姓名 { get; set; }

       public string 学号 { get; set; }

       public Information[] 个人信息 { get; set; }





   }

}


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

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

 MongoCollection<Student_Query> coll;
        MongoCursor<Student_Query> cursor;
声明位置如图:

用C#操作Mongodb(c#mongodb驱动)_第11张图片





查询按钮的代码:

 private void button3_Click(object sender, EventArgs e)
        {
            MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
            coll = database.GetCollection< Student_Query>("student");
            cursor = coll.FindAll();
            var ex = cursor.ElementAt< Student_Query>(0);//取第一个数据
            string sResult = "";
            sResult = string.Format("{0}{1}{2}{3}{4}", ex.姓名, ex.学号, ex.个人信息[0].Value, ex.个人信息[1].Value, ex.个人信息[2].Value);

            MessageBox.Show(sResult);
        }

结果:

用C#操作Mongodb(c#mongodb驱动)_第12张图片




情景二:用条件查询

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

查询按钮代码如下:

 MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
         coll = database.GetCollection<Student_Query>("student");


        // var bs = coll.FindOne(Query.EQ("_id", new ObjectId("512c14c211f9d518809d8d0c")));
          var bs = coll.FindOne(Query.EQ("姓名", "赵云"));

            string sResult = "";
            sResult = string.Format("{0}{1}{2}{3}{4}", bs.姓名, bs.学号, bs.个人信息[0].Value, bs.个人信息[1].Value, bs.个人信息[2].Value);

            MessageBox.Show(sResult);


结果:

用C#操作Mongodb(c#mongodb驱动)_第13张图片


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

查询按钮代码如下:

 MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
        var  coll = database.GetCollection("student");


        // var bs = coll.FindOne(Query.EQ("_id", new ObjectId("512c14c211f9d518809d8d0c")));
          var bs = coll.FindOne(Query.EQ("姓名", "赵云"));

            string sResult = "";
            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());

            MessageBox.Show(sResult);


结果:

用C#操作Mongodb(c#mongodb驱动)_第14张图片


查询常用语句:

求文档长度

   var bs = coll.FindAll();
        string i=  bs.Count().ToString();
求文档中数组长度
  var bs = coll.FindOne(Query.EQ("姓名", "赵云"));

       string i = bs.AsBsonDocument["个人信息"].AsBsonArray.Count().ToString();

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

 if (bs.AsBsonDocument.Contains("姓名"))

 

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

 

 var bs = coll_fieldConnect.FindOne(Query.EQ("id", process_id));
                    StringBuilder sb = new StringBuilder();
                    foreach (BsonElement d in bs)
                    {

                      

                       
                            sb.AppendFormat("{0}:\t{1}\n", d.Name, d.Value);
                       
                    }
                    richTextBox1.Text = sb.ToString();



 



 

修改数据:

修改按钮代码如下:

            MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
            var coll = database.GetCollection("student");

            BsonDocument bd = new BsonDocument();
            bd.Add(new BsonElement("姓名", "赵云"));
            bd.Add(new BsonElement("学号", "002"));
            BsonArray ba = new BsonArray();


            ba.Add(new BsonDocument { { "Name", "性别" }, { "Value", "男" } });
            ba.Add(new BsonDocument { { "Name", "班级" }, { "Value", "1班" } });
            ba.Add(new BsonDocument { { "Name", "专业" }, { "Value", "数学" } });

            bd.Add(new BsonDocument("个人信息", ba));

            IMongoQuery query = Query.EQ("学号", "002");

            coll.Update(query, new UpdateDocument(bd));  MessageBox.Show("修改结束");


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

用C#操作Mongodb(c#mongodb驱动)_第15张图片



删除数据:

删除按妞的代码如下:

  private void button2_Click(object sender, EventArgs e)
        {
             MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
            var coll = database.GetCollection("student");

            
            
            
           IMongoQuery query = Query.EQ("学号", "002");

            coll.Remove(query);
            MessageBox.Show("删除结束");

        }

结果:

用C#操作Mongodb(c#mongodb驱动)_第16张图片

删除成功








2.对mapreduce的操作语法

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

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

得到结果为 文档数为1

用C#操作Mongodb(c#mongodb驱动)_第17张图片



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

 private void button5_Click(object sender, EventArgs e)
        {
            MongoClient client;
            MongoServer server;
            MongoDatabase database;

            var conStr = "mongodb://192.168.0.188";
            client = new MongoClient(conStr);

            server = client.GetServer();
            database = server.GetDatabase("test");
            var coll = database.GetCollection("student");

            BsonJavaScript map = new BsonJavaScript(@"
function map() {
emit(
	1,					
		{count: 1}	);
}");
            BsonJavaScript reduce = new BsonJavaScript(@"function(key,values){
   	var total=0;
	values.forEach(function(val) {
		total   +=  val.count; 	
	
	});
return total;
};");



          var  result = coll.MapReduce(map, reduce);
          string count = "";
           foreach (var s in result.InlineResults)
           {
               count = s.AsBsonDocument["value"].AsBsonDocument["count"].ToString();
           }

           MessageBox.Show(count);
        }


结果:

用C#操作Mongodb(c#mongodb驱动)_第18张图片


你可能感兴趣的:(用C#操作Mongodb(c#mongodb驱动))