Docs Menu
Docs Home
/ /

$and

$and

$and realiza una operación lógica AND en 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 AND implícita al especificar una lista de expresiones separadas por comas.

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.

$and tiene la siguiente sintaxis:

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

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 $and causara un error al evaluarse por sí sola, el $and que 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 $and puede causar un error incluso si la primera expresión se evalúa como false.

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 ] } }
]
} )

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 price no es igual a 1.99 y

  • El campo price existe.

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 } } )

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 qty valor del campo es menor que 10 o mayor 50 que, y

  • El sale valor del campo es igual a true o el price valor del campo es menor 5 que.

La consulta no puede utilizar una AND operación implícita porque utiliza el operador más de una $or vez.

Tip

Volver

Lógica

En esta página