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

$and

在此页面上

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

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

注意

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

可以使用 $and 查找托管在以下环境中的部署:

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

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

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

$and 采用以下语法:

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

要允许查询引擎优化查询,$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 集合中满足如下条件的所有文档:

  • price 字段值不等于 1.99 并且

  • price 字段存在。

可使用隐式 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 } } ] }
]
} )

该查询选择所有文档,其中:

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

  • sale字段值等于trueprice字段值小于5

该查询不能使用隐式 AND 操作,因为它多次使用 $or 操作符。

提示

另请参阅:

后退

逻辑查询