MongoDB查询条件有哪些?范围、或查询与取反操作详解

 更新时间:2026年07月22日 09:54:41   作者:一起学python吧  
还在为MongoDB查询发愁吗?本文手把手教你使用find方法,从基本查询、指定返回字段,到复杂条件如范围、或查询、取反,再到数组、内嵌文档查询,最后还有limit、skip和排序技巧,帮你轻松掌握MongoDB查询精髓,提升开发效率

① find简介

MongoDB使用find进行查询,查询结果就是返回一个文档的子集,子集包括0个到整个集合,find的第一个参数决定了要返回那些文档,这个参数是一个文档,用于指定查询条件,空的文档{}会返回集合中所有文档,如果不指定,则默认为{}

# 语法:
db.stu.find({查询条件})

例1(不指定查询条件):

例2(指定查询条件):

② 指定需要返回的键(注意:_id是默认返回的,即使不指定)

有时候我们并不想将整个文档返回,整个时候可以使用find的第二个参数来指定想要的键;

好处:这样做既可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗

# 语法:
db.stu.find({查询条件}, {指定要返回哪些键})

例1(查询name为paul的文档,只返回文档的age和hobby键值对):

例2(查询name为paul的文档,但是不需要like字段):

****** 由上面两个例子可以看出,find的第二个参数,不仅可以指定返回的字段,还可以指定不需要返回的字段 ******

③ 查询条件(范围查询,或查询,取反)

查询不仅能像前面那样精确查询,还可以匹配更加复杂的条件,比如:范围,OR,或取反等

⑴ 比较操作符:"$gt", "$gte", "$lt", "$lte", "$ne"就是全部的比较操作符,分别对应,>, >=, <, <=, !=,当然也可以将其中几个组合起来使用

例1:查询_id值大于2小于5的文档

例2:查询_id值不等于3的文档

⑵mongoDB中有两种方式进行OR查询,"$in" 可以用来查询一个键的多个值;"$or"更通用一些,可以在多个键中查询任意的给定值

例1:查询name值为paul或者为wang的文档("$in")

例2:查询name值不为paul或者不为wang的文档("$nin"(和"$in"是相对的,相当于互相取反)

注意:"$in"是非常灵活的,可以指定不同的条件和值,比如说如果一个文档在做将文档的id值转换为其name值得过程中,这时不确定其_id是1还是"paul",那么可以使用下面的方式来查询

例3: 查询_id值为1或者为paul的文档

上面我们提到有两种方式可以做OR判断,那么现在就要使用"$or","$or"和"$in"一样,都是接受一个数组,但是"$in"接受一个条件数组

例4:查询name为wang或者score为90的文档($or)

⑶ 取反,"$not"是元条件句,可以用在任何其他条件之上

例:查询name不为wang或者zhou的值

④ 特定类型查询(null值如何查询)

⑴特殊值null

我们知道mongodb文档可以包含多种类型的数据,但是null值在查询中会有特殊的表现,其不仅会返回某个键为null的文档,还会返回不存在该键的文档

例:查询age值为null的文档

如果我们像以往一样查询如下,会返回所有满足条件的结果,还会返回不存在该键的结果(这显然不是我们想要的

那么如果要查询age为null的文档该怎么办呢?????

不仅要检查该键的值为null,还要判断该键是否存在!!!!!!!

上面使用$in看上去有点令人费解,我们还可以使用$eq,如下

⑤ 查询数组

⑴ 查询数组元素

查询数组元素和查询标量是一样的

例:查询hobby对应数组中有game的集合(和查询hobby键对一个某个值的操作一样)

⑵ 通过多个元素匹配数组 $all

例: 查询hobby对应数组中有meat和fruit的集合

⑶ 查询数组特定位置的元素所对应的集合(下标也是从0开始)

例:查询hobby集合中第1个元素为fruit的集合

⑷ 查询数组长度

例:查询hobby多对应数组长度为3的集合

⑥ 查询内嵌文档 (.语法)

例:查询msg中addr的值为456的文档

⑦ 限制返回结果(limit)

例:查询所有结果返回三个

⑧ 略过xx过(skip)

例:查询所有并略过前3个

注意:略过数据过多的话会影响性能

那么如何解决这种问题呢:

1,以某个键排序,查询第一页的数据

2,后续查询条件则使用第一页最后一个文档的排序键值为条件进行查询

⑨ 指定键排序(可以指定多个)

例:查询所有文档,并以name值正序排列(正序1,倒叙-1)

注意:有时候一个键对应的值是多种类型,这时如果对其进行排序,其排序顺序是预先定义好的:

最小值< nul l< 数字< 字符串 < 对象/文档 < 数组 < 二进制数据 < 对象ID< 布尔值 < 日期型 < 时间戳 < 正则表达式 < 最大值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MongoDB 监控工具mongostat和mongotop的使用

    MongoDB 监控工具mongostat和mongotop的使用

    这篇文章主要介绍了MongoDB 监控工具mongostat和mongotop的使用方法,帮助大家更好的理解和学习使用MongoDB,感兴趣的朋友可以了解下
    2021-03-03
  • MongoDB 事务支持详解

    MongoDB 事务支持详解

    这篇文章主要介绍了MongoDB 事务支持详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • 如何利用MongoDB存储Docker日志详解

    如何利用MongoDB存储Docker日志详解

    这篇文章主要给大家介绍了关于如何利用MongoDB存储Docker日志的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友没呢下面随着小编来一起学习学习吧
    2018-09-09
  • MongoDB释放空闲空间的几种常用方法

    MongoDB释放空闲空间的几种常用方法

    这篇文章主要给大家介绍了关于MongoDB释放空闲空间的几种常用方法,分别包括compact、db.repairDatabase()、secondary节点重同步以及db.copyDatabase()这几种方法,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-07-07
  • 基于Morphia实现MongoDB按小时、按天聚合操作方法

    基于Morphia实现MongoDB按小时、按天聚合操作方法

    这篇文章主要介绍了基于Morphia实现MongoDB按小时、按天聚合操作 ,实现思路是启动定时任务,对各用户的设备状态数据分别按照小时以及天进行聚合,并存储进数据库中供用户后续查询.需要的朋友可以参考下
    2019-07-07
  • MongoDB 删除数据库的实现示例

    MongoDB 删除数据库的实现示例

    删除 MongoDB 数据库是一个简单的操作,但需要谨慎进行,在执行删除操作之前,请务必做好准备工作,并确认您有权执行该操作,本文具有一定的参考价值,感兴趣的可以了解一下
    2026-01-01
  • MongoDB使用profile分析慢查询的步骤

    MongoDB使用profile分析慢查询的步骤

    这篇文章主要介绍了MongoDB profile分析慢查询的示例,帮助大家更好的理解和学习使用MongoDB数据库,感兴趣的朋友可以了解下
    2021-04-04
  • MongoDB的下载、安装与部署方法

    MongoDB的下载、安装与部署方法

    这篇文章主要介绍了MongoDB的下载、安装与部署方法,需要的朋友可以参考下
    2017-05-05
  • Centos系统搭建MongoDB数据库

    Centos系统搭建MongoDB数据库

    这篇文章介绍了Centos系统搭建MongoDB数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • MongoDB操作类封装实例代码

    MongoDB操作类封装实例代码

    这篇文章主要给大家介绍了关于MongoDB操作类封装的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论