MongoDB基本查询条件操作符都有哪些

技术MongoDB基本查询条件操作符都有哪些MongoDB基本查询条件操作符都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简介Mon

MongoDB基本查询条件的运算符有哪些?很多新手对此不是很清楚。为了帮助大家解决这个问题,下面小编就为大家详细讲解一下。有这种需求的人可以学习,希望你能有所收获。

简介

find函数用于在MongoDB中进行查询。查询最终返回集合中文档的子集,该子集包括集合中所有文档的0个文档。

[第一个查询参数]

find函数第一个参数是一个文档,它描述了我们想要在集合中查询什么类型的文档。如果我们想查询所有的文档,可以在没有任何参数的情况下调用find函数,或者第一个参数为空document {},如下例所示:

MongoDB基本查询条件操作符都有哪些

我们应该如何理解表示查询参数的第一个文档?例如,我们执行db.people.find({'age':18})。这个函数实际上意味着我们要查询的是‘年龄’值为18的单据,而‘年龄’值不等于18或者没有这个键的单据是不会被查询的。比如我们来执行这个函数:db . people . find({ ' name ' : ' jimmy ',' age' :18}),它实际上代表的是查询关键字“name”中值为' Jimmy '而关键字“age”中值为AND 18的文档,也就是查询文档中所有条件与!

使用第一个参数时,需要注意一点:查询文档中“键值对”中的值必须是常量!

[第二个查询参数]

在上面的例子中,我们没有指定或者只指定由find函数的第一个参数获得的文档,它将包含原始集合文档的所有键值对。这种情况不适用于一些具有大量键值对的文档,因为我们可能只关心这个文档中的几个键值对。此时,我们可以使用find函数的第二个参数来指定返回的键值对,这样也可以减少传输的数据量,加快效率。第二个参数也是一个文档,如下例所示:

MongoDB基本查询条件操作符都有哪些

使用find函数第二个参数,我们需要注意这个文档的以下内容:

1“对于除“_id”以外的所有键,它们的值要么不同时等于0(表示要查询键值对),要么同时等于0(表示要忽略键值对);否则,会报告错误。

2.对于“_id”以外的所有键,如果它们的值都是0,那么如果键“_id”此时也被指示,则键“_id”的值必须是0,否则将报告错误。

3.对于键“_id”,如果其值未命名,则查询结果必须包含该键-值对。如果不想包含它,可以指示它的值为0。

综上所述,如果我们需要使用第二个参数,我们将使用以下技巧:指示要获取的所有键的值都是0以外的数字;如果我们想过滤关键字' _id ',那么指出关键字' _id '的值是0。

[查询条件]

上面提到的查询条件都是完全匹配的,就是多少个“=”。MongoDB中的查询显然有更复杂的匹配。如作用域、OR子句、倒装等。我们分别介绍。

“$lt”、“$lte”、“$gt”和“$gte”都是范围比较运算符,分别对应、=、=。通过组合它们,您可以查询值在一定范围内的文档。例如,我们需要查询18-30岁(含)的所有用户:

MongoDB基本查询条件操作符都有哪些

这种范围查询运算符不仅用于值为数字的键,而且对于值为日期的键的范围匹配特别有用!例如,我们想查询注册日期在2007年5月1日之前的用户的信息。我们可以写如下:

MongoDB基本查询条件操作符都有哪些

有时我们需要查询一个关键字不等于某个值的文档。我们可以使用这个条件运算符“$ne”,意思是不相等。如果我们要查询注册用户名不等于“tom”的文档:

MongoDB基本查询条件操作符都有哪些

条件运算符“$ne”适用于所有类型的值!

[或查询]

在MongoDB中查询OR有两种方式:“$in”可以用来查询一个键的多个值,而“$or”比较通用,可以用来完成多个键值对的组合。我们分别演示一下:我们需要查询彩票号码为10、20、30的所有投注者的姓名。

MongoDB基本查询条件操作符都有哪些

但如果还要求我们查询出奖券号码为10,20,30 或投注者姓名为“tim”的所有投注信息,我们单纯用"$in"是无法胜任的,我们可以用操作符"$or",“$or”操作符可以组合其他操作符如"$in"拼凑的条件:

MongoDB基本查询条件操作符都有哪些

使用“$or”操作符,其值为一个条件数组,数组中各个条件最后通过or组合。使用这个条件操作符有一个最佳实践是:将最宽松的条件放在前面,这样可以加快文档匹配速度!


【$mod 和 $not】

$mod操作符,使用格式为 {"键":{"$mod":[num1, num2]}},查询“键”的值对num1取余,如果这个值等于num2,则整条文档符合条件。如我们要查询所有在其本命年的用户(年龄是12的整数倍):

MongoDB基本查询条件操作符都有哪些

$not是元条件符,即可以用于任何其他条件之上的,表明取反,还是上面的例子,我们这次要查所有不在其本命年的用户文档信息:

MongoDB基本查询条件操作符都有哪些

$not条件符配合正则表达式使用非常强大,这里先预报一下,我们后续会提到引入正则表达式的查询。


【特定于类型的查询】

查询某键,其值为null的文档时,我们会发现一个奇怪的现象,我们先看一个例子:

MongoDB基本查询条件操作符都有哪些

利用值为null的条件貌似可以查询正确的文档,但我们忽略了如果集合中存在没有键"y"的文档,会出现什么情况:

MongoDB基本查询条件操作符都有哪些

果然不出意外,没有这个键的文档同样匹配值为null这种条件,如果我们需要过滤掉这种文档,需要另外一个条件操作符$exists,指明这个键必须存在:

MongoDB基本查询条件操作符都有哪些

我们发现,因为MongoDB中没有提供类似于"$eq"这种相等的条件操作符,所以“=null”的判断只能通过{"$in":[null]}来实现!


【正则表达式】

正则表达式在任何语言中都是操作字符串的一大利器!在MongoDB的查询中,其依然威力不减。正则表达式可以灵活的匹配字符串类型的值。如我们要查询所有姓名为“joy”开头并且忽略大小写的用户文档:

MongoDB基本查询条件操作符都有哪些

Shell中写正则表达式的方式和JavaScript的一致,写在一对“ // ”之间的就是正则表达式。具体正则表达式的一些写法大家可以参考正则表达式的相关规范。我们上面提到了操作符$not和正则表达式的联合使用,我们这边也演示一下:

MongoDB基本查询条件操作符都有哪些

我们可以看到使用$not是将其作为正则表达式的键,表明和这个正则表达式不匹配。我们在最前边也介绍了,MongoDB支持正则表达式这种数据类型,即“键值对”中允许“值”为正则表达式,对于这种键值对,正则表达式也可以匹配成功:

MongoDB基本查询条件操作符都有哪些

但注意正则表达式的匹配必须是完全匹配,即正则表达式的写法完全相同才可以匹配成功(这个在实际应用中基本不会遇见的)。

MongoDB可以为前缀型的正则表达式(/^joe/i)查询使用索引,所以这种前缀型的正则表式查询速度会很快!

这里再稍微提一下find函数和findOne函数的区别,刚才说了,find函数返回的是一个子集,而findOne就是返回一条文档或null(未查询到结果),对于一些可以接受文档做参数的函数如insert,可以直接使用findOne的返回值作为参数。

最后就这基本的查询条件操作符部分稍作总结,因为我们前面介绍修改器操作符也是以"$"开头,如“$set”,"$inc"等,这里介绍的查询条件操作符也是以"$"开头,那使用上有哪些区分呢?修改器操作符都是外层文档的键,而查询条件的操作符基本都是内层文档的键(注意“$or”是一个例外)。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/66424.html

(0)

相关推荐

  • 如何解析Java常量池与字符串intern

    技术如何解析Java常量池与字符串intern这期内容当中小编将会给大家带来有关如何解析Java常量池与字符串intern,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Java应用程

    攻略 2021年11月23日
  • 怎么理解python决策树的基本原理

    技术怎么理解python决策树的基本原理本篇文章给大家分享的是有关怎么理解python决策树的基本原理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。决策树是

    攻略 2021年12月3日
  • 怎么使用Go365对Office365用户进行渗透

    技术怎么使用Go365对Office365用户进行渗透本篇内容介绍了“怎么使用Go365对Office365用户进行渗透”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处

    攻略 2021年10月22日
  • 使用了索引查询还是慢的原因是什么

    技术使用了索引查询还是慢的原因是什么本篇内容介绍了“使用了索引查询还是慢的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够

    攻略 2021年10月22日
  • 如何将后端baas化(baas替代后端程序员)

    技术怎样将后端BaaS化怎样将后端BaaS化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。BaaS 化的核心其实就是把我们的后端应用封装成 RESTfu

    攻略 2021年12月21日
  • SpringCloud分布式微服务b2b2c电子商务中docker-feign-hystrix-ribbon的示例分析

    技术SpringCloud分布式微服务b2b2c电子商务中docker-feign-hystrix-ribbon的示例分析小编给大家分享一下SpringCloud分布式微服务b2b2c电子商务中docker-feign-

    攻略 2021年11月19日