$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
。
例如,以下查询在 $x
为 0
时 始终 产生错误
db.example.find( { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } )
以下查询,其中包含提供给 $and
的多个表达式,如果存在任何文档中 $x
为 0
,则 可能 产生错误
db.example.find( { $and: [ { x: { $ne: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } )
示例
AND
查询,包含多个指定相同字段的表达式
考虑以下查询
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 } } )
AND
查询,包含多个指定相同运算符的表达式
考虑以下查询
db.inventory.find( { $and: [ { $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] }, { $or: [ { sale: true }, { price : { $lt : 5 } } ] } ] } )
查询选择所有
字段的值小于
10
或大于50
,并且字段的值等于
true
或字段的值小于5
。
查询无法使用隐式的 AND
操作,因为它多次使用了 $or
操作符。