Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$and (query operador de predicado)

$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.

La mayoría de los lenguajes de programación y controladores, incluido el MongoDB Shell (mongosh), no permiten la construcción de objetos con claves duplicadas en el mismo nivel de objeto. Por ejemplo:

db.inventory.find( { price: { $in: [ 7.99, 3.99 ], $in: [ 4.99, 1.99 ] } } )

La query anterior no es válida porque el nombre del campo price tiene operadores duplicados en el mismo nivel de objeto. La query enviada al servidor difiere de la intención. Para que la query funcione, utiliza un AND explícito:

db.inventory.find( {
$and: [
{ price: { $in: [ 7.99, 3.99 ] } },
{ price: { $in: [ 4.99, 1.99 ] } }
]
} )

La query anterior comprueba explícitamente que se cumplan ambas condiciones: el arreglo price debe incluir al menos un valor de cada conjunto $in. Para obtener más información, consulta Ejemplos.

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 query puede reescribirse con una operación implícita AND que combine las expresiones de operadores 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 query selecciona todos los documentos donde:

  • el valor del campo qty es menor que 10 o mayor que 50, y

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

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

Tip

Volver

Lógica

En esta página