zoukankan      html  css  js  c++  java
  • C#/.NET 使用官方驱动操作MongoDB(一):插入、查询

    概述

      想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动。

      C#版的驱动有很多,这里我们先用官方提供的 MongoDB.Driver(使用 Nuget 安装),当前版本为2.7.0。

      NuGet 会同时安装3个软件包,其中:

        MongoDB.Driver:顾名思义,驱动程序。(它几乎没有任何遗留代码,应该用于所有新项目)

        MongoDB.Bson:序列化、Json相关。(它是MongoDB.Driver.Core的依赖。它可以被自己使用)

        MongoDB.Driver.Core:驱动程序的核心和MongoDB.Driver的依赖。你可能不会直接使用这个包

      另外,在nuget上还有1个软件包:

        MongoDB.Driver.GridFS:GridFS包。更多文档可以在参考指南中找到。

      安装好驱动后,我们就可以开始撸代码了。

    1.建立数据库连接

    1 // 使用连接字符串连接
    2 var client = new MongoClient("mongodb://localhost:27017");
    3  
    4 // 制定多个地址和端口,让程序自动选择一个进行连接。
    5 var client = new MongoClient("mongodb://localhost:27017,localhost:27018,localhost:27019");

      该 MongoClient 实例实际上代表了一个到数据库的连接池; 即使有多个线程,也只需要一个 MongoClient 类的实例。

    2.获取数据库

      我们可以使用client的GetDatabase方法获取数据库,即使数据库不存在,也没有关系,它会在首次使用数据库的时候进行自动创建。

    var database = client.GetDatabase("foo");

    3.获取数据集 Collection

      调用database的GetCollection<TDocument>方法可以获取数据集,其中如果数据是预先定义好的可以在<输入数据的类型>  ,如果是没有定义好的,可以使用BsonDocument类型,BsonDocument表示没有预定于的模式。

    var collection = database.GetCollection<BsonDocument>("bar");

      此时,我们将获取到“foo”数据库中的“bar”集合,即使“bar”集合不存在也没有关系,同数据库一样,若数据集不存在,会自动创建该数据集。

    4.插入数据

      获得了collection数据集后,就可以往数据集中插入数据了。

      我们可以使用BsonDocument来创建 document 文档对象。

     1 var document = new BsonDocument
     2 {
     3     { "name", "MongoDB" },
     4     { "type", "Database" },
     5     { "count", 1 },
     6     { "info", new BsonDocument
     7         {
     8             { "x", 203 },
     9             { "y", 102 }
    10         }}
    11 };

      要将该document插入到collection中,我们可以使用InsertOne(同步插入)或InsertOneAsync(异步插入)方法

    InsertOne(同步插入):

    collection.InsertOne(document);

    InsertOneAsync(异步插入):

    await collection.InsertOneAsync(document);

      如果想要插入多个数据,可以使用 InsertMany 或 InsertManyAsync 方法

    5.查询数据

      查询数据中,分三种进行叙述:

        第一种,获取第一条数据,

        第二种,获取所有数据,

        第三种,获取指定条件下的数据。

     5.1查找集合中的第一条数据

        查询集合中的第一条数据,需要用到的是FirstOrDefault方法或者FirstOrDefaultAsync方法,当有数据时,返回数据的第一条或者默认的那条,当没有数据时,返回null.

      同步查询并打印数据:

    1 var document = collection.Find(new BsonDocument()).FirstOrDefault();
    2 Console.WriteLine(document.ToString());

      异步查询并打印数据:

    var document = await collection.Find(new BsonDocument()).FirstOrDefaultAsync();
    Console.WriteLine(document.ToString());

     5.2查询数数据集中的所有数据

        要查找数据集中的所有数据,可以使用ToList或者ToListAsync方法,需要注意的是,这种在预期返回数据较少的时候使用

      同步查询所有数据:

    var documents = collection.Find(new BsonDocument()).ToList();

      异步查询所有数据:

    var documents = await collection.Find(new BsonDocument()).ToListAsync();

      获取到了数据后,我们可以使用foreach的方法遍历得到每一个数据的值。

      如果返回的数据预期很大,建议采用以下异步的迭代的方法处理。

    await collection.Find(new BsonDocument()).ForEachAsync(d => Console.WriteLine(d));

      如果实在要用同步的方法,那么可以使用ToEnumerable适配器方法。

    1 var cursor = collection.Find(new BsonDocument()).ToCursor();
    2 foreach (var document in cursor.ToEnumerable())
    3 {
    4     Console.WriteLine(document);   
    5 }

     5.3用过滤器筛选获取单个文档

        可以通过创建一个过滤器来传递给Find方法来获取我们需要的的那个子集,然后用Fist方法,获取第一条数据。

      首先,创建一个筛选器:

    var filter = Builders<BsonDocument>.Filter.Eq("i", 71);

      以上筛选器表示筛选i=71的数据。

      然后,通过同步或者异步的方法来查找符合该条件的数据:

    var document = collection.Find(filter).First();
    Console.WriteLine(document);

      或:

    1 var document = await collection.Find(filter).FirstAsync();
    2 Console.WriteLine(document);

      因为我们在Find()后调用了Fist方法,所以获取的只是一条数据,如果不调用该函数,则获取的是一个数据集合。

     5.4使用过滤器获取一组文档

        如果我们要获取的是大于或者小于某值的数据集,那么就可以不用Fist()方法了。

      比如,获取i>50的数据,我们先设计一个这样的筛选器:

    var filter = Builders<BsonDocument>.Filter.Gt("i", 50);

      然后,查找符合该条件的所有数据并输出。

      同步方法:

    1 var cursor = collection.Find(filter).ToCursor();
    2 foreach (var document in cursor.ToEnumerable())
    3 {
    4     Console.WriteLine(document);   
    5 }

      异步方法:

    await collection.Find(filter).ForEachAsync(document => Console.WriteLine(document));

      如果是50<i<=100,我们可以设计一个这样的筛选器

    1 var filterBuilder = Builders<BsonDocument>.Filter;
    2 var filter = filterBuilder.Gt("i", 50) & filterBuilder.Lte("i", 100);

    1

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/zhangchaoran/p/9593318.html
Copyright © 2011-2022 走看看