On this page本页内容
$or
The $or
operator performs a logical OR
operation on an array of two or more <expressions>
and selects the documents that satisfy at least one of the <expressions>
. $or
运算符对包含两个或多个<expressions>
的数组执行逻辑OR
运算,并选择至少满足其中一个<expressions>
的文档。The $or
has the following syntax:$or
具有以下语法:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
Consider the following example:考虑以下示例:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
This query will select all documents in the 此查询将选择inventory
collection where either the quantity
field value is less than 20
or the price
field value equals 10
.inventory
集合中quantity
字段值小于20
或price
字段值等于10
的所有文档。
$or
When evaluating the clauses in the 在计算$or
expression, MongoDB either performs a collection scan or, if all the clauses are supported by indexes, MongoDB performs index scans. $or
表达式中的子句时,MongoDB要么执行集合扫描,要么(如果所有子句都受索引支持)MongoDB执行索引扫描。That is, for MongoDB to use indexes to evaluate an 也就是说,对于MongoDB使用索引来计算$or
expression, all the clauses in the $or
expression must be supported by indexes. $or
表达式,$or
表达式中的所有子句都必须得到索引的支持。Otherwise, MongoDB will perform a collection scan.否则,MongoDB将执行集合扫描。
When using indexes with 在对$or
queries, each clause of an $or
can use its own index. $or
查询使用索引时,$or
的每个子句都可以使用自己的索引。Consider the following query:考虑以下查询:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
To support this query, rather than a compound index, you would create one index on 为了支持此查询,而不是复合索引,您需要创建一个quantity
and another index on price
:quantity
索引和另一个price
索引:
db.inventory.createIndex( { quantity: 1 } ) db.inventory.createIndex( { price: 1 } )
MongoDB can use all but the geoHaystack index to support MongoDB可以使用除geoHaystack索引之外的所有索引来支持$or
clauses.$or
子句。
$or
and text
Queries$or
和text
查询If 如果$or
includes a $text
query, all clauses in the $or
array must be supported by an index. $or
包含$text
查询,则索引必须支持$or
数组中的所有子句。This is because a 这是因为$text
query must use an index, and $or
can only use indexes if all its clauses are supported by indexes. $text
查询必须使用索引,而$or
只能在索引支持其所有子句的情况下使用索引。If the 如果$text
query cannot use an index, the query will return an error.$text
查询无法使用索引,则查询将返回错误。
$or
$or
supports geospatial clauses with the following exception for the near clause (near clause includes $nearSphere
and $near
). $or
支持地理空间子句,但near子句有以下例外(near子句包括$nearSphere
和$near
)。$or
cannot contain a near clause with any other clause.不能将near子句与任何其他子句一起包含。
$or
When executing 当使用$or
queries with a sort()
, MongoDB can now use indexes that support the $or
clauses. sort()
执行$or
查询时,MongoDB现在可以使用支持$or
子句的索引。Previous versions did not use the indexes.以前的版本没有使用索引。
$or
$in
When using 如果使用$or
with <expressions>
that are equality checks for the value of the same field, use the $in
operator instead of the $or
operator.$or
与<expressions>
一起检查同一字段的值是否相等,请使用$in
运算符而不是$or
运算符。
For example, to select all documents in the 例如,要选择inventory
collection where the quantity
field value equals either 20
or 50
, use the $in
operator:inventory
集合中quantity
字段值等于20
或50
的所有文档,请使用$in
运算符:
db.inventory.find ( { quantity: { $in: [20, 50] } } )
$or
Clauses$or
子句You may nest 您可以嵌套$or
operations.$or
操作。
To allow the query engine to optimize queries, 要允许查询引擎优化查询,$or
handles errors as follows:$or
按如下方式处理错误:
$or
would cause an error when evaluated alone, the $or
containing the expression may cause an error but an error is not guaranteed.$or
的任何表达式在单独计算时会导致错误,则包含表达式的$or
可能会导致错误但不保证会出现错误。$or
may cause an error even if the first expression evaluates to true
.$or
的第一个表达式之后提供的表达式可能会导致错误,即使第一个表达式的计算结果为true
。For example, the following query always produces an error if 例如,如果$x
is 0
:$x
为0
,以下查询始终会产生错误:
db.example.find( { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } )
The following query, which contains multiple expressions supplied to 以下查询包含提供给$or
, may produce an error if there is any document where $x
is 0
:$or
的多个表达式,如果存在$x
为0
的任何文档,则可能会产生错误:
db.example.find( { $or: [ { x: { $eq: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } )