$and$andrealiza una operación lógicaANDen un arreglo de una o más expresiones (<expression1>,<expression2>, etc.) y selecciona los documentos que cumplen todas las expresiones.Nota
MongoDB proporciona una operación
ANDimplícita al especificar una lista de expresiones separadas por comas.
Compatibilidad
Puedes usar $and para implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
$and tiene la siguiente sintaxis:
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
Comportamiento
Al evaluar las cláusulas en la expresión $and, el optimizador del query de MongoDB considera qué índices están disponibles que podrían ayudar a satisfacer las cláusulas de la expresión $and al seleccionar el mejor plan para ejecutar.
Para permitir que el motor de queries las optimice, $and gestiona los errores de la siguiente manera:
Si alguna expresión suministrada a
$andcausara un error al evaluarse por sí sola, el$andque contiene la expresión podría causar un error, pero no se garantiza que ocurra.Una expresión proporcionada después de la primera proporcionada a
$andpuede causar un error incluso si la primera expresión se evalúa comofalse.
Por ejemplo, la siguiente query siempre produce un error si $x es 0:
db.example.find( { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } )
La siguiente query, que contiene múltiples expresiones suministradas a $and, puede generar un error si hay algún documento donde $x sea 0:
db.example.find( { $and: [ { x: { $ne: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } )
Ejemplos
AND Consultas con múltiples expresiones que especifican el mismo campo
Considere esta query:
db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
La query selecciona todos los documentos de la colección inventory donde:
el valor del campo
priceno es igual a1.99yEl campo
priceexiste.
La consulta se puede reescribir con una operación AND implícita que combina las expresiones del operador para el campo price:
db.inventory.find( { price: { $ne: 1.99, $exists: true } } )
AND Consultas con múltiples expresiones que especifican el mismo operador
Considere esta query:
db.inventory.find( { $and: [ { $or: [ { qty: { $lt : 10 } }, { qty : { $gt: 50 } } ] }, { $or: [ { sale: true }, { price : { $lt : 5 } } ] } ] } )
La consulta selecciona todos los documentos donde:
el
qtyvalor del campo es menor que10o mayor50que, yEl
salevalor del campo es igual atrueo elpricevalor del campo es menor5que.
La consulta no puede utilizar una AND operación implícita porque utiliza el operador más de una $or vez.