迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

在 MongoDB 中使用多个条件进行查询

作者:迹忆客 最近更新:2023/05/07 浏览次数:

本文将教您如何使用 MongoDB 中的多个文档进行多条件查询。 $and 和 $or 运算符通过每个示例进行了简要说明。

MongoDB 为用户提供了不同的逻辑查询操作符,$or 和$and 操作符是其一。 但首先,让我们看一下本文的目录。

  1. $或运算符
  2. 使用 $or 运算符查找多个条件
  3. $和运算符
  4. 使用 $and 运算符查找多个条件

MongoDB 中的 $or 运算符

根据需要,可以在 find()update() 等方法中使用该操作符。

  1. 您还可以将此运算符用于文本查询、地理空间查询和排序操作。
  2. 当 MongoDB 评估 $or 表达式中的子句时,它会执行集合扫描。 或者,如果索引支持 $or 表达式中的所有子句,则 MongoDB 执行索引扫描。
  3. 也可以嵌套 $or 操作。

通过对两个或多个表达式的数组执行逻辑或运算,OR 运算符选择满足至少一个表达式的文档。 $or 运算符具有以下语法。

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

考虑以下示例。

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

在此查询中,将返回库存集合中数量字段值小于 51 或价格字段值小于 20 的任何文档。

让我们首先讨论一下 MongoDB 中 or 运算符的行为。

$or 运算符的子句和索引

在评估 $or 表达式中的所有子句时,MongoDB 会执行集合扫描或索引扫描。 如果索引支持所有子句,MongoDB 将执行索引扫描。

因此,要让 MongoDB 分析语句,$or 表达式中的所有子句都必须有索引支持。 如果不是这种情况,MongoDB 将进行集合扫描。

在 $or 查询中使用索引时,$or 查询的每个子句都可以使用其索引。 请看下面的示例。

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

您可以为数量建立一个索引,为价格建立另一个索引来处理此查询,而不是复合索引。

db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )

要启用 $or 子句,MongoDB 可以使用除 geoHaystack 索引之外的任何索引。

文本查询和 $or 运算符

如果 $or 包含 $text 查询,则索引必须支持 $or 数组中的所有子句。 因此,$text 查询必须使用索引,而 $or 查询只能在支持其所有子句的情况下使用索引。

如果 $text 查询不使用索引,查询将返回错误。

地理空间查询和 $or 运算符

$or 允许使用地理子句,near 子句除外(包括 $nearSphere 和 $near)。 $or 中不能有关系子句与另一个子句。

排序操作和 $or 运算符

当使用 sort() 执行 $or 查询时,MongoDB 现在可以使用支持 $or 子句的索引。 在以前的 MongoDB 版本中,没有使用索引。

$or VS $in

将 $in 运算符而不是 $or 运算符用于对同一字段的值进行相等性测试的表达式。

例如,使用 $in 运算符来选择库存集合中数量字段值为 40 或 1000 的所有文档。

db.inventory.find ( { quantity: { $in: [40, 1000] } } )

使用 $or 运算符查找多个条件

MongoDB 中的 or 运算符用于仅选择或检索至少与提供的短语之一匹配的文档。

  1. 您还可以根据需要在 find()update() 等方法中使用此运算符。
  2. 您还可以将此运算符用于文本查询和排序操作。
  3. 也可以嵌套 $or 操作。

让我们举一个例子来理解 $or 运算符的工作原理。

例子:

让我们创建一个包含以下文档的集合。

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

使用 find() 方法显示集合中的所有文档。

db.students.find();

以下是使用 $or 运算符的 MongoDB 查询。

db.students.find({
  $or: [
    {
      Age: {
        $lte: 24
      }
    },
    {
      score: {
        $lt: 80
      }
    },
    {
      status: "Inactive"
    }
  ]
})

这将产生以下输出。

使用 or 操作符


MongoDB 中的 $and 运算符

$and 对一个或多个表达式(expression1>、expression2> 等)的数组执行逻辑与运算,并选择满足所有表达式的文档。

行为:

$and 处理错误如下,以协助查询引擎改进查询。

  1. 如果提供给 $and 的任何表达式在单独计算时会导致错误,则包含该表达式的 $and 可能会导致错误,尽管这不能保证。
  2. 在提供给 $and 的第一个表达式之后提供的表达式可能会导致错误,即使第一个表达式的计算结果为 false。

语法:

使用 and 运算符时使用的语法如下。

{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }

例如,如果 $x 为 0,以下查询将始终产生错误。

db.example.find( {
   $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

以下查询包含多个提供给 $and 的表达式,如果存在 $x 为 0 的任何文档,则可能会产生错误。

db.example.find( {
   $and: [
      { x: { $ne: 0 } },
      { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
   ]
} )

使用 $and 运算符查找多个条件

您可以在 MongoDB 中使用 $and 运算符来应用多个条件。 首先,我们将使用 $and 操作选择满足所有条件短语的所有论文。

  1. 您可以根据需要在 find()update() 等方法中使用此运算符。
  2. 您还可以将此运算符用于文本查询和排序操作。 因此,让我们借助一个例子来理解它。

以下记录被插入到学生集合中。

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

现在,您使用 $and 运算符应用多个条件并查找文档。

db.students.find({
  $and: [
    {
      "language": "Python"
    },
    {
      "Age": 35
    }
  ]
})

在这里,$and 运算用于查找语言为 Python、Age 为 35 的文档。

从此屏幕截图中可以看到上述代码在 MongoDB 中的运行情况。

使用 and 操作符

您已根据给定条件成功获得结果。 然后,您可以使用 $and 运算符并根据条件检索文档。

在本文中,使用 $and$or 运算符详细解释了在 MongoDB 中使用多个文档进行多个条件查询。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

MongoDB 中的 $unset 运算符

发布时间:2023/05/10 浏览次数:135 分类:MongoDB

本文将讨论 $unset 运算符在 MongoDB 中的工作原理。 此外,我们将演示使用此运算符从 MongoDB 集合中的所有文档中删除一个字段。MongoDB 中的 $unset 运算符 $unset 是用于从实体中删除字段的运算符。

MongoDB 中的 $ne 运算符

发布时间:2023/05/10 浏览次数:82 分类:MongoDB

本文将讨论 $ne 运算符如何在 MongoDB 中工作。 另外,我们会列举它与$not操作符的区别。MongoDB 中的 $ne 运算符 $ne 是MongoDB中的一个运算符,代表不等于。

MongoDB $Set 运算符

发布时间:2023/05/10 浏览次数:54 分类:MongoDB

在本文中,我们将学习如何使用 $set 运算符部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并。

MongoDB 中 $push 和 $addToSet 的区别

发布时间:2023/05/10 浏览次数:103 分类:MongoDB

这篇指导文章将告诉您什么是 MongoDB 中的运算符以及它们是如何描述的。 此外,对 $push 和 $addToSet 运算符进行了简要的详细说明。 $push 和 $addToSet 之间的区别通过代码段详细说明。

在 MongoDB 中按日期对集合进行排序

发布时间:2023/05/10 浏览次数:150 分类:MongoDB

在本 MongoDB 教程中,讨论了在 MongoDB 中对集合进行排序的问题。 简要说明了对数据库中的集合进行排序的不同方法。在 MongoDB 中使用 sort() 函数

统计 MongoDB 中的记录

发布时间:2023/05/10 浏览次数:83 分类:MongoDB

本文讨论 MongoDB 中的运算符、聚合运算符以及计算总记录数的不同方法。MongoDB 中的操作 CRUD 操作是用户界面的概念,允许用户浏览、搜索和更改数据库中的对象。

MongoDB 中的漂亮打印

发布时间:2023/05/10 浏览次数:199 分类:MongoDB

本文将讨论如何在 MongoDB 中使用漂亮的打印来显示格式化的结果。MongoDB 中的漂亮打印

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便