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)

相关推荐

  • 支付宝申请商家二维码,怎么开通支付宝商家收钱码

    技术支付宝申请商家二维码,怎么开通支付宝商家收钱码需要开通支付宝商家收钱码支付宝申请商家二维码,需要自己是支付宝商家,方法如下: 1、首先在手机上找到并打开支付宝APP客户端。 2、然后在支付宝页面中选择红色箭头所指处的

    生活 2021年10月24日
  • 怎么实现Zynq-7000开发环境的搭建

    技术怎么实现Zynq-7000开发环境的搭建本篇文章给大家分享的是有关怎么实现Zynq-7000开发环境的搭建,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    攻略 2021年12月10日
  • 在Linux 6.3如何安装mysql5.7.16数据库

    技术在Linux 6.3如何安装mysql5.7.16数据库这篇文章主要介绍了在Linux 6.3如何安装mysql5.7.16数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让

    攻略 2021年10月30日
  • 上中下结构的字有哪些,汉字有几种结构?如上下、左右等

    技术上中下结构的字有哪些,汉字有几种结构?如上下、左右等汉字有几种结构1独体字2合体字
    (1)上下结构
    (2)上中下结构
    (3)左右结构
    (4)左中右结构
    (5)全包围结构
    (6)半包围结构
    (7)穿插结构
    (8)品字形

    生活 2021年10月30日
  • 如何理解ASP.NET中WCF服务与ASMX服务的兼容性

    技术如何理解ASP.NET中WCF服务与ASMX服务的兼容性这期内容当中小编将会给大家带来有关如何理解ASP.NET中WCF服务与ASMX服务的兼容性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可

    攻略 2021年11月26日
  • Hibernate查询语句有哪些

    技术Hibernate查询语句有哪些小编给大家分享一下Hibernate查询语句有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. se

    攻略 2021年12月8日