• 在.Net Core中使用MongoDB的入门教程(二)


    在上一篇文章中,讲到了MongoDB在导入驱动、MongoDB的连接,数据的插入等。

    在.Net Core中使用MongoDB的入门教程(一)

    本篇文章将接着上篇文章进行介绍MongoDB在.Net Core中的使用,建议看这篇文章之前,先看上面一篇文章。

    另外,今天在安装MongoDB数据库的时候,居然卡在了下一步几乎花了两三个小时才安装好,可能这一步要蛮多时间,大家遇到了不要心急,耐心等待。


    7.查询数据

    查询数据中,分三种进行叙述,第一种,获取第一条数据,第二种,获取所有数据,第三种,获取指定条件下的数据

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

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

    以下方法分别展示了在同步和异步的方法下查询并打印出数据。

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

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

    此时,返回的是我们在上一篇文章中插入的第一条数据:
    { 
        "_id": ObjectId("551582c558c7b4fbacf16735") },
        "name": "MongoDB", 
        "type": "database", 
        "count": 1,
        "info": { "x" : 203, "y" : 102 } 
    }

    我们注意到,在我们插入数据的时候,并没有给数据设置id,id元素已被MongoDB自动地插入到数据中了。

    7.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适配器方法。

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


    7.3用过滤器筛选获取单个数据

    可以通过创建一个过滤器来传递给Find方法来获取我们需要的的那个子集,然后用Fist方法,获取第一条数据。
    首先,创建一个筛选器。
    var filter = Builders<BsonDocument>.Filter.Eq("i", 71);

    以上筛选器表示筛选i=71的数据。
    然后,通过同步或者异步的方法来查找符合该条件的数据。
    var document = collection.Find(filter).First();
    Console.WriteLine(document);

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

    因为我们在Find()后,调用了Fist方法,所以获取的只是一条数据,如果不调用该函数,则获取的是一个数据集合。
    如果我们要获取的是大于或者小于某值的数据集,那么久可以不用Fist()方法了

    比如,获取i>50的数据,我们先设计一个这样的筛选器。
    var filter = Builders<BsonDocument>.Filter.Gt("i", 50);

    然后,查找符合该条件的所有数据并输出。
    同步方法:
    var cursor = collection.Find(filter).ToCursor();
    foreach (var document in cursor.ToEnumerable())
    {
        Console.WriteLine(document);   
    }
    异步方法:
    await collection.Find(filter).ForEachAsync(document => Console.WriteLine(document));


    如果是50<i<=100,我们可以设计一个这样的筛选器。
    var filterBuilder = Builders<BsonDocument>.Filter;
    var filter = filterBuilder.Gt("i", 50) & filterBuilder.Lte("i", 100);

    然后和上文中同样的方法应用该筛选器并把数据输出。
    同步方法:
    var cursor = collection.Find(filter).ToCursor();
    foreach (var document in cursor.ToEnumerable())
    {
        Console.WriteLine(document);   
    }
    异步方法:
    await collection.Find(filter).ForEachAsync(document => Console.WriteLine(document));


    一看时间,已经22.44了,我们寝室23点关门,我现在还在公司,要回去了,下回再接着给大家分享。
  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8490117.html
Copyright © 2020-2023  润新知