$or

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字段值小于20price字段值等于10的所有单据。

Behaviors行为

$or Clauses and Indexes子句和索引

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 $or expression, all the clauses in the $or expression must be supported by indexes. 也就是说,为了让MongoDB使用索引来计算$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 $or clauses.MongoDB可以使用geoHaystack索引以外的所有索引来支持$or子句。

$or and text Queries$ortext查询

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 and GeoSpatial Queries以及地理空间查询

$or supports geospatial clauses with the following exception for the near clause (near clause includes $nearSphere and $near). 支持地理空间子句,但near子句除外(near子句包括$nearSphere$near)。$or cannot contain a near clause with any other clause.$or不能与任何其他子句一起包含near子句。

$or and Sort Operations和排序操作

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 versus $in$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:例如,要选择库存quantity字段值等于2050的所有文档,请使用$in运算符:

db.inventory.find ( { quantity: { $in: [20, 50] } } )

Nested $or Clauses嵌套的$or子句

You may nest $or operations.你可以嵌套$or操作。

See also参阅

$and, find(), sort(), $in