首先,使用的是官方提供的C#訪问组件https://github.com/mongodb/mongo-csharp-driver


然后、编译后引用MongoDB.Bson.dll及MongoDB.Driver.dll,并在cs文件里声明引用
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
第一个是针对Bson格式的命名空间,第二个是主空间。第三个是用来构造查询和更新等条件的构造器命名空间

一、数据库连接
           MongoClient client = null;
            MongoServer server = null;
       
            //connection
            string conStr = "mongodb://user:pw@127.0.0.1/db1";
            client = new MongoClient(conStr);
            server = client.GetServer();
            server.Connect();

注意连接串的写法。上面的写法是带用户认证的,关于连接串写法的很多其它信息能够參考http://docs.mongodb.org/ecosystem/tutorial/authenticate-with-csharp-driver/

二、获取数据库内的Collection
            MongoDatabase db = server.GetDatabase("db1");
            MongoCollection colaa = db.GetCollection("col1");
这里获取在db1数据库下,名为col1的Collection,

这里获取的MongoCollection支持泛型,能够按默认的BsonDocument为一行的格式获取,也能够按自己定义的类来获取,
若按BsonDocument为一行获取,代码例如以下(每一个BsonDocument对象为Collection的一行):
            MongoCursor<BsonDocument> doc = colaa.FindAllAs<BsonDocument>();
            foreach (BsonDocument book in doc) {}

若按自己定义的类为一行来获取。代码例如以下:
            MongoCursor<row> res = colaa.FindAllAs<row>();
              
          foreach (row row1 in res){}
这里要注意。假设按自己定义类来获取,那么类须要预先定义好。且类中的变量名必须与数据库中一致,且列数也须要一致,若出现数据库中有某一列,但类中缺少这个对象时,会报错,以下是一个类定义的演示样例:
    public class row
    {
        public ObjectId _id;
        public string name;
        public string part;
        public string age;
    }
上例中,FindAllAs函数为所有查询。另一些其他行查询及筛选方法,见http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#mongocollection-tdefaultdocument-class中的MongoCollection部分
三、读取Collection中一行内的内容
和上面相应的,有两种情况,假设是按自己定义类来获取的数据行,那么直接訪问类的成员变量就可以

假设是按BsonDocument获取的,那每一行数据相应一个BsonDocument。一个BsonDocument是由多个“Name-Value"对构成的,当中Name为String格式,Value为BsonValue类型,该值能够直接使用book["name"]的格式进行訪问。关于BsonValue的进一步具体说明,能够參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#bsonvalue-and-subclasses中的BsonValue部分

四:新建Collection
新建Colletion非常easy。代码示比例如以下,但注意,假设已经存在了指定名称的Collection。则会抛出异常
            //create Collection
            MongoDatabase db = server.GetDatabase("db1");
            var res =db.CreateCollection("col2");

五:插入行
相同分两种情况,插入方式基本相同。代码例如以下:
            //insert
            MongoDatabase db = server.GetDatabase("db1");
            MongoCollection colaa = db.GetCollection("col1");
            //使用BsonDocument格式插入
            BsonDocument doc = new BsonDocument { { "name", "sse2" }, { "part", "44224" } };
            colaa.Insert(doc);
            //使用自定类插入
            row r1 = new row { name = "sse3", part
= "554" };
            colaa.Insert<row>(r1);

这里注意一下,假设自己定义类里某一个变量没有赋值。在插入到数据库时,也会写一个Null进去,而BsonDocument则不会出现这个元素,比方上两个语句的执行结果:
{ "_id" : ObjectId("5355d8dfccee160de4dca545"), "name" : "sse2", "part" : "44224" }
{ "_id" : ObjectId("5355d93bccee16088491c420"), "name" : "sse3", "part" : "554", "age" : null }

另一些的方法,比如批量写入等,能够參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#insertbatch-method中的对应内容

六:更新行
更新行时须要使用到构造器构造查询条件和更新语句,Query为查询条件构造器,Update为更新语句构造器。代码示比例如以下:
           //update
            MongoDatabase db = server.GetDatabase("db1");
            MongoCollection colaa = db.GetCollection("col1");
            var query = Query.And(
                Query.EQ("name", "sse3"),
                Query.EQ("part", "554")
            );
            var update = MongoDB.Driver.Builders.Update.Set("age", "36");
            colaa.Update(query, update);

其他另一些更新的函数。比方更新和插入为一体的Save等,能够參考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#save-tdocument-method的对应内容

七:删除行
删除行时也须要使用到Query构造器构造查询条件,语句会将符合条件的行删除掉。代码示比例如以下:
           //remove
            MongoDatabase db = server.GetDatabase("db1");
            MongoCollection colaa = db.GetCollection("col1");
            var query = Query.And(
                Query.EQ("name", "sse3"),
                Query.EQ("part", "554")
            );
            var res = colaa.Remove(query);

使用C#对MongoDB中的数据进行查询,改动等操作的更多相关文章

  1. 使用highcharts显示mongodb中的数据

    1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...

  2. MongoDB中的数据聚合工具Aggregate和Group

    周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...

  3. MongoDB中导入数据命令的使用(mongoimport)

    MongoDB中导入数据命令的使用(mongoimport) 制作人:全心全意 语法: mongoimport <options> <file> 介绍: 该命令可以将CSV,T ...

  4. 用java在客户端读取mongodb中的数据并发送至服务器

    使用Java自带的socket端口来实现,程序如下: Client.java package com.cn.gao; import java.net.*; import java.io.*; impo ...

  5. 解决Spring中使用Example无法查询到Mongodb中的数据问题

    1 问题描述 在Spring Boot中使用Mongodb中的Example查询数据时查询不到,示例代码如下: ExampleMatcher matcher = ExampleMatcher.matc ...

  6. Java对MongoDB中的数据查询处理

    Java语言标准的数据库时MySQL,但是有些时候也会用到MongoDB,这次Boss交代处理MongoDB,所以讲代码以及思路记录下了 摸索的过程,才发现软件的适用还是很重要的啊!!! 我连接的Mo ...

  7. 如何在Mongodb中实现数据超时自动删除功能?

    在工作过程中,我们难免会遇到这样的问题,我们想保存一些数据,但是我们对这些数据的要求并不高,有时候往往只是想要某个时间范围内的数据,比如我们如果永远只关心从当前时间往前推半年内的数据特性,那么我们就不 ...

  8. MongoDB中的数据导出为excel CSV 文件

    1.打开命令行,进入我们所安装的mongodb路径下的bin文件夹 2.我们采用bin文件夹下的mongoexport方法进行导出, mongoexport -d myDB -c user -f _i ...

  9. C#代码 利用MongoDB中Group聚合函数查询

    例子: public static void getUserRFM(DateTime beginTime, DateTime endTime)        {            MongoDat ...

随机推荐

  1. eclipse更改主题

    长期使用eclipse,导致视觉疲劳,就想着能否换个主题调节调节. 通过设置window>preferences>appearance设置theme,貌似不起作用. 一查,发现一个绝佳的网 ...

  2. linux之sed

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  3. HTML标签解释大全

      一.HTML标记 标签:!DOCTYPE 说明:指定了 HTML 文档遵循的文档类型定义(DTD).   标签:a 说明:标明超链接的起始或目的位置.   标签:acronym 说明:标明缩写词. ...

  4. CCNA实验(7) -- NAT

    1.静态NAT2.动态NAT3.复用内部全局地址的NAT(PAT) enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t ...

  5. BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊(动态树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2002 [题目大意] 给出一片森林,操作允许更改一个节点的父亲,查询一个节点的深度. [ ...

  6. Java知识点复习

    总结下java的知识点 final 关键字-方法:不能被子类重写(override)-变量:不能被修改-类:不可以被继承,派生子类 finally 关键字与try/catch语句配合使用,即使有异常抛 ...

  7. Oracle 11g RAC features

    <一,> oracle 11g r2 RAC提供了以下功能: 高可用:shared-everything 模式保证了单节点的故障不会停止服务,集群中的其他节点将快速接管 可扩展性:多节点分 ...

  8. hbase0.96 put流程 源码分析

    无意间多瞄了一眼hbase0.98的代码,想复习下put流程.发现htable里面已经找不到processBatchOfPuts()奇怪了.看了半天原来变化还真大事实上0.96就没这个了,于是又搞了个 ...

  9. RabbitMQ(2)

    上一次安装了RabbitMQ并成功创建了vhost和user,可是生产和消费的过程还没有完毕.这次主要调了一下这个过程. 上次基本的问题是没有实现过程代码的编写保存,事实上也就是Python程序,这两 ...

  10. Android使用ViewFlipper实现左右滑动效果面

    在我的博客中,上次是使用ViewPager实现左右滑动的效果的,请看文章:Android使用ViewPager实现左右滑动效果. 这次我来使用ViewFlipper实现这种效果,好了,先看看效果吧: ...