$or
在本页面
$or
$or操作符对包含两个或多个<expressions>的数组执行逻辑或操作,并选择满足至少一个<expressions>的文档。$or的语法如下:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }考虑下面的例子:
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )该查询将选择inventory集合中quantity字段值小于20或price字段值等于10的所有文档。
行为
$or子句和索引
$or子句和索引当对$or表达式中的子句求值时,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子句。
$not和正则表达式
$not和正则表达式如果$or包含$text查询,则$or数组中的所有子句必须由索引支持。这是因为$text查询必须使用索引,而$or只能在索引支持其所有子句的情况下使用索引。如果$text查询不能使用索引,则查询将返回一个错误。
$or和地理空间查询
$or和地理空间查询$or支持地理空间子句,但near子句有以下例外(near子句包括$nearSphere和$near)。$or不能包含任何其他子句的near子句。
$or和排序操作
$or和排序操作当使用sort()执行$or查询时,MongoDB现在可以使用支持$or子句的索引。以前的版本不使用索引。
$or与$in
$or与$in当使用$or <expressions>来检查相同字段的值时,使用$in操作符而不是$or操作符。
例如,要选择数量字段值为20或50的库存集合中的所有文档,使用$in操作符:
db.inventory.find ( { quantity: { $in: [20, 50] } } )Nested $or Clauses
$or Clauses你可能会嵌套$or操作。
也可以看看
译者:李冠飞
校对:
最后更新于