$or

在本页面

  • 行为

  • $or

    • $or operator 对两个或多个<expressions>的 array 执行逻辑OR操作,并选择满足至少一个<expressions>的文档。 $or具有以下语法:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

考虑以下 example:

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

此查询将选择inventory集合中quantity字段 value 小于20 price field value 等于10的所有文档。

行为

$or 子句和索引

在评估$or表达式中的子句时,MongoDB 要么执行集合扫描,要么如果索引支持所有子句,MongoDB 将执行索引扫描。也就是说,对于 MongoDB 使用索引来计算$or表达式,$or表达式中的所有子句必须由索引支持。否则,MongoDB 将执行集合扫描。

使用带$or查询的索引时,$or的每个子句都可以使用自己的索引。请考虑以下查询:

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

要支持此查询而不是复合索引,您将在quantity上创建一个索引,在price上创建另一个索引:

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

MongoDB 可以使用除geoHaystack索引之外的所有索引来支持$or子句。

$or 和文本查询

更改了 version 2.6.

如果$or包含$text查询,则索引必须支持$or array 中的所有子句。这是因为$text查询必须使用索引,而$or只能在索引支持其所有子句时使用索引。如果$text查询无法使用索引,则查询将_return 错误。

$or 和地理空间查询

更改了 version 2.6.

$or支持地理空间条款,以及 near 子句的以下 exception(near 子句包括$nearSphere和$near)。 $or不能包含带有任何其他子句的 near 子句。

$or 和排序操作

更改了 version 2.6.

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

$or 与$in

当使用$or和<expressions>对相同字段的 value 进行相等性检查时,请使用$in operator 而不是$or operator。

对于 example,要_选择quantity字段 value 等于2050inventory集合中的所有文档,请使用$in operator:

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

嵌套的$or 子句

您可以嵌套$or操作。

也可以看看
$and,find(),sort(),$in