文档菜单
文档首页
/
MongoDB 手册
/ / / /

$and

在本页

  • 兼容性
  • 语法
  • 行为
  • 示例
$and

$and在由一个或多个表达式(<expression1><expression2>等)组成的数组上执行逻辑AND操作,并选择满足所有表达式的文档。

注意

MongoDB在指定逗号分隔的表达式列表时,提供隐式AND操作。

您可以在以下环境中使用$and

  • MongoDB Atlas:云中MongoDB部署的完全托管服务

  • MongoDB Enterprise:基于订阅的自托管MongoDB版本

  • MongoDB Community:源代码可用的、免费使用且可自托管的MongoDB版本

$and 语法如下

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

当评估 $and 表达式中的子句时,MongoDB 的查询优化器会考虑哪些可用的索引可以帮助满足 $and 表达式,以选择最佳执行计划。

为了允许查询引擎优化查询,$and 以以下方式处理错误

  • 如果提供给 $and 的任何表达式单独评估时会导致错误,则包含该表达式的 $and 可能会导致错误,但错误不是保证的。

  • 提供给 $and 的第一个表达式之后的表达式可能会导致错误,即使第一个表达式评估为 false

例如,以下查询在 $x0始终 产生错误

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

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

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

考虑以下查询

db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )

查询选择所有在 inventory 集合中

  • 字段的值不等于 1.99,并且

  • 字段存在。

查询可以使用隐式 AND 操作来重写,该操作结合了 price 字段的运算符表达式

db.inventory.find( { price: { $ne: 1.99, $exists: true } } )

考虑以下查询

db.inventory.find( {
$and: [
{ $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] },
{ $or: [ { sale: true }, { price : { $lt : 5 } } ] }
]
} )

查询选择所有

  • 字段的值小于 10 或大于 50,并且

  • 字段的值等于 true 或字段的值小于 5

查询无法使用隐式的 AND 操作,因为它多次使用了 $or 操作符。

提示

另请参阅

返回

逻辑查询