Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

$or(聚合)

在此页面上

  • 定义
  • 行为
  • Error Handling
  • 例子
$or

计算一个或多个表达式,如果任何表达式为 true,则返回 true。否则,$or 将返回 false

$or 通过以下语法实现:

{ $or: [ <expression1>, <expression2>, ... ] }

有关表达式的更多信息,请参阅 表达式操作符。

除了 false 布尔值外,$or 还将以下值计算为 falsenull0undefined 值。$or 将所有其他值(包括非零数值和数组)计算为 true

例子
结果
{ $or: [ true, false ] }
true
{ $or: [ [ false ], false ] }
true
{ $or: [ null, 0, undefined ] }
false
{ $or: [ ] }
false

要允许查询引擎优化查询,$or 会按如下方式处理错误:

  • 如果提供给 $or 的任何表达式在单独求值时会导致错误,则包含该表达式的 $or 可能但不一定会导致错误。

  • 在提供给 $or 的第一个表达式之后提供的表达式可能会导致错误,即使第一个表达式的计算结果为 true

例如,如果 $x0,以下查询会始终产生错误:

db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

以下查询包含提供给 $or 的多个表达式,如果存在 $x0 的任何文档,则查询可能会产生错误:

db.example.find( {
$or: [
{ x: { $eq: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )

考虑包含以下文档的 inventory 集合:

{ "_id" : 1, "item" : "abc1", description: "product 1", qty: 300 }
{ "_id" : 2, "item" : "abc2", description: "product 2", qty: 200 }
{ "_id" : 3, "item" : "xyz1", description: "product 3", qty: 250 }
{ "_id" : 4, "item" : "VWZ1", description: "product 4", qty: 300 }
{ "_id" : 5, "item" : "VWZ2", description: "product 5", qty: 180 }

以下操作使用 $or 操作符来确定 qty 是否大于 250 小于 200

db.inventory.aggregate(
[
{
$project:
{
item: 1,
result: { $or: [ { $gt: [ "$qty", 250 ] }, { $lt: [ "$qty", 200 ] } ] }
}
}
]
)

操作返回以下结果:

{ "_id" : 1, "item" : "abc1", "result" : true }
{ "_id" : 2, "item" : "abc2", "result" : false }
{ "_id" : 3, "item" : "xyz1", "result" : false }
{ "_id" : 4, "item" : "VWZ1", "result" : true }
{ "_id" : 5, "item" : "VWZ2", "result" : true }

后退

$objectToArray