在 MongoDB 中使用多个条件进行查询
本文将教您如何使用 MongoDB 中的多个文档进行多条件查询。 $and 和 $or 运算符通过每个示例进行了简要说明。
MongoDB 为用户提供了不同的逻辑查询操作符,$or 和$and 操作符是其一。 但首先,让我们看一下本文的目录。
- $或运算符
- 使用 $or 运算符查找多个条件
- $和运算符
- 使用 $and 运算符查找多个条件
MongoDB 中的 $or 运算符
根据需要,可以在 find()
、update()
等方法中使用该操作符。
- 您还可以将此运算符用于文本查询、地理空间查询和排序操作。
-
当 MongoDB 评估
$or
表达式中的子句时,它会执行集合扫描。 或者,如果索引支持$or
表达式中的所有子句,则 MongoDB 执行索引扫描。 -
也可以嵌套
$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 运算符用于仅选择或检索至少与提供的短语之一匹配的文档。
-
您还可以根据需要在
find()
、update()
等方法中使用此运算符。 - 您还可以将此运算符用于文本查询和排序操作。
- 也可以嵌套 $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"
}
]
})
这将产生以下输出。
MongoDB 中的 $and 运算符
$and
对一个或多个表达式(expression1>、expression2> 等)的数组执行逻辑与运算,并选择满足所有表达式的文档。
行为:
$and
处理错误如下,以协助查询引擎改进查询。
- 如果提供给 $and 的任何表达式在单独计算时会导致错误,则包含该表达式的 $and 可能会导致错误,尽管这不能保证。
- 在提供给 $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 操作选择满足所有条件短语的所有论文。
-
您可以根据需要在
find()
、update()
等方法中使用此运算符。 - 您还可以将此运算符用于文本查询和排序操作。 因此,让我们借助一个例子来理解它。
以下记录被插入到学生集合中。
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
和 $or
运算符详细解释了在 MongoDB 中使用多个文档进行多个条件查询。
相关文章
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 浏览次数:99 分类:MongoDB
-
在这篇 MongoDB 教程文章中,您将学习如何通过指定或限制要返回的字段的投影执行基本查询操作,从而为 MongoDB 集合中给定的所有文档选择单个或多个字段。
在 MongoDB 中使用 findOneAndUpdate() 方法
发布时间:2023/05/10 浏览次数:180 分类:MongoDB
-
findOneAndUpdate() 方法更新集合中符合选择条件的第一个匹配文档。 使用此方法,用户可以替换嵌入的文档等。
MongoDB 中的漂亮打印
发布时间:2023/05/10 浏览次数:199 分类:MongoDB
-
本文将讨论如何在 MongoDB 中使用漂亮的打印来显示格式化的结果。MongoDB 中的漂亮打印