猿教程 Logo

.Net连接MongoDb:逻辑运算符

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

介绍

在上一篇文章中,我们开始在MongoDb中查找逻辑运算符。 特别地,我们看到了使用$ gt和$ lt操作符的几个例子,它们代表大于和小于。 为了这个目的,我们不用数学符号“ 相反,操作符与被表现为扩展JSON文档的子文档一起使用。 我们可以链接由逗号分隔的多个过滤器,这些过滤器相当于AND操作:城市的人口必须至少为50000,并且位于德克萨斯州。

在这篇文章中,我们将看看逻辑运算符 $and ,$or, $not 和 $nor.

逻辑运算符

除$之外的所有逻辑运算符后面都是由相应运算符链接在一起的一组过滤器。 我们在上一篇文章中看到了一个$and运算符的例子:

db.zipcodes.find({$and : [{"pop": {$lte: 60000,$gt: 50000}},{"state": "MA"}]})

注意$和运算符之后的过滤器数组。 该查询意味着以下内容:

  • 人口必须大于50000,小于等于60000

  • 此外,城市必须位于“MA”状态,即马萨诸塞州

只返回符合数组中所有条件的文本,即在方括号内。 但是,$和运算符不常用,因为AND查询可以简单地用逗号分隔的列表链接,如下所示:

db.zipcodes.find({"pop" : {$lte : 60000, $gt : 50000}, "state" : "MA"})

我想你会同意这个较短的版本比较简单。

$或操作符的工作方式大致相同,不同之处在于它不能简化。 我们必须遵守在阵列中提供过滤器的符号。 但是,这次逻辑运算符将是OR,如“人口必须超过50000或者城市必须位于北达科他州”。

这次我们从餐厅收藏一个例子。 我们会搜索那些菜肴是中国OR的餐厅位于曼哈顿:

db.restaurants.find({$or: [{"cuisine" : "Chinese"}, {"borough" : "Manhattan"}]})

以下是一个例子:

{
        "_id" : ObjectId("56edc2ff03a1cd840734dbab"),
        "address" : {
                "building" : "351",
                "coord" : [
                        -73.98513559999999,
                        40.7676919
                ],
                "street" : "West   57 Street",
                "zipcode" : "10019"
        },
        "borough" : "Manhattan",
        "cuisine" : "Irish",
        "grades" : [
                {
                        "date" : ISODate("2014-09-06T00:00:00Z"),
                        "grade" : "A",
                        "score" : 2
                },
                {
                        "date" : ISODate("2013-07-22T00:00:00Z"),
                        "grade" : "A",
                        "score" : 11
                },
                {
                        "date" : ISODate("2012-07-31T00:00:00Z"),
                        "grade" : "A",
                        "score" : 12
                },
                {
                        "date" : ISODate("2011-12-29T00:00:00Z"),
                        "grade" : "A",
                        "score" : 12
                }
        ],
        "name" : "Dj Reynolds Pub And Restaurant",
        "restaurant_id" : "30191841"
}

关于这些运营商没有什么可以讨论的。 还有一个$ nor运算符,它否定$或者这样,它就成为NOR条件。 它具有与$ or相同的语法,并返回失败数组中所有过滤器的文档。 例如。 我们可以找到所有不是中国菜的餐厅,不在曼哈顿,如下所示:

db.restaurants.find({$nor: [{"cuisine" : "Chinese"}, {"borough" : "Manhattan"}]})

此外,我们有一个$ not操作符,简单地反转过滤器,例如 这里是一个查询,找到所有不在曼哈顿的餐馆:

db.restaurants.find({"borough" : {$not : {$eq : "Manhattan"}}})

什么是$ eq? 为什么我们不能写下列内容?

db.restaurants.find({"borough" : {$not : "Manhattan"}})

$ eq是“等于”运算符,$不需要一个子文档。 所以$ eq运算符在这里非常方便。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CsharpMongo/7.html