Consulta con múltiples condiciones en MongoDB
-
Operador
$or
en MongoDB -
Encuentre múltiples condiciones usando el operador
$or
-
Operador
$y
en MongoDB -
Encuentre múltiples condiciones usando el operador
$and
Este artículo le enseñará cómo consultar con múltiples condiciones usando múltiples documentos en MongoDB. Los operadores $and
y $or
se explican brevemente con ejemplos de cada uno.
MongoDB proporciona al usuario diferentes operadores lógicos de consulta, los operadores $o
y $y
son uno. Pero primero, echemos un vistazo a la tabla de contenido de este artículo.
- Operador
$o
- Encuentra múltiples condiciones usando el operador
$or
- Operador
$y
- Encuentra múltiples condiciones usando el operador
$and
Operador $or
en MongoDB
De acuerdo con los requisitos, puede usar este operador en métodos como buscar()
, actualizar()
, etc.
- También puede utilizar este operador con consultas de texto, consultas
Geoespaciales
y operaciones de clasificación. - Cuando MongoDB evalúa las cláusulas en la expresión
$or
, realiza un escaneo de colección. O bien, si los índices admiten todas las cláusulas de la expresión$or
, entonces MongoDB realiza exploraciones de índice. - También puede anidar la operación
$or
.
Al ejecutar una operación lógica OR
en una matriz de dos o más expresiones
, el operador OR
selecciona documentos que satisfacen al menos una de las expresiones
. El operador $or
tiene la siguiente sintaxis.
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
Considere el siguiente ejemplo.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
En esta consulta, se devolverán todos los documentos de la colección de inventario con un valor de campo cantidad
inferior a 51
o el valor de campo precio
inferior a 20
.
Analicemos primero el comportamiento del operador o
en MongoDB.
Cláusulas e índices para el operador $or
Al evaluar todas las cláusulas en la expresión $or
, MongoDB realiza un escaneo de colección o un escaneo de índice. MongoDB ejecuta exploraciones de índice si los índices admiten todas las cláusulas.
Como resultado, para que MongoDB analice la declaración, todas las cláusulas en la expresión $or
deben estar respaldadas por índices. Si este no es el caso, MongoDB realizará un análisis de la colección.
Cada cláusula de la consulta $or
puede utilizar su índice cuando se emplean índices con consultas $or
. Mira el siguiente ejemplo a continuación.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
En lugar de un índice compuesto, establecería un índice para la cantidad
y otro para el precio
para manejar esta consulta.
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
Para habilitar las cláusulas $or
, MongoDB puede usar cualquier índice excepto el índice geoHaystack
.
Consultas text
y el operador $or
Si $o
incluye una consulta $texto
, un índice debe admitir todas las cláusulas de la matriz $o
. Como resultado, una consulta $texto
debe usar un índice, y una consulta $o
solo puede usar los índices si se admiten todas sus cláusulas.
Si la consulta $texto
no utiliza un índice, la consulta devolverá un error.
Consultas GeoSpatial
y el operador $or
$or
permite cláusulas geográficas, excepto la cláusula near
(que incluye $nearSphere
y $near
). No puede haber una cláusula relativa en $or
con otra cláusula.
Operaciones de clasificación y el operador $or
Al realizar consultas $or
con sort()
, MongoDB ahora puede utilizar índices que admitan las cláusulas $or
. En versiones anteriores de MongoDB, los índices no se usaban.
$o
VS $en
Utilice el operador $in
en lugar del operador $or
con expresiones
que son pruebas de igualdad para el valor del mismo campo.
Utilice el operador $in
, por ejemplo, para elegir todos los documentos de la colección inventario
donde el valor del campo cantidad
sea 40
o 1000
.
db.inventory.find ( { quantity: { $in: [40, 1000] } } )
Encuentre múltiples condiciones usando el operador $or
El operador o
en MongoDB se usa para seleccionar o recuperar solo documentos que coincidan con al menos una de las frases proporcionadas.
- También puede usar este operador en un método como
buscar()
,actualizar()
, etc., según los requisitos. - También puede usar este operador con consultas de texto y operaciones de clasificación.
- También puede anidar la operación
$or
.
Vamos a por un ejemplo para entender el funcionamiento del operador $or
.
Ejemplo:
Vamos a crear una colección que contenga los siguientes documentos.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
Muestra todos los documentos de una colección utilizando el método find()
.
db.students.find();
La siguiente es la consulta de MongoDB con el operador $or
.
db.students.find({
$or: [
{
Age: {
$lte: 24
}
},
{
score: {
$lt: 80
}
},
{
status: "Inactive"
}
]
})
Esto producirá la siguiente salida.
Operador $y
en MongoDB
$and
realiza una operación lógica AND
en una matriz de una o más expresiones (expression1>
, expression2>
, etc.) y selecciona los documentos que satisfacen todas las expresiones.
Comportamiento:
$and
maneja los errores de la siguiente manera para ayudar al motor de consultas a mejorar las consultas.
- Si cualquier expresión proporcionada a
$and
daría lugar a un error si se evaluara sola, el$and
que contiene la expresión puede dar lugar a un error, aunque esto no está garantizado. - Una expresión proporcionada después de la primera expresión proporcionada a
$y
puede causar un error incluso si la primera expresión se evalúa comofalsa
.
Sintaxis:
La sintaxis utilizada cuando se utiliza el operador y
es la siguiente.
{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }
Por ejemplo, la siguiente consulta siempre producirá un error si $x
es 0
.
db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )
La siguiente consulta, que contiene múltiples expresiones proporcionadas a $and
, puede generar un error si hay algún documento donde $x
es 0
.
db.example.find( {
$and: [
{ x: { $ne: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )
Encuentre múltiples condiciones usando el operador $and
Puede utilizar el operador $and
en MongoDB para aplicar varios criterios. Primero, elegiremos todos los artículos que cumplan con todas las frases de condición utilizando la operación $and
.
- Puede usar este operador en métodos como
buscar()
,actualizar()
, etc., según el requisito. - También puede usar este operador con consultas de texto y operaciones de clasificación.
Entonces, entendámoslo con la ayuda de un ejemplo.
Los siguientes registros se insertan en la colección estudiantes
.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
Ahora, aplica múltiples condiciones usando el operador $and
y encuentra los documentos.
db.students.find({
$and: [
{
"language": "Python"
},
{
"Age": 35
}
]
})
Aquí se aplica la operación $and
para encontrar aquellos documentos donde idioma
es Python
, y Edad
es 35
.
Vea el funcionamiento del código anterior en MongoDB en esta captura de pantalla.
Obtuvo el resultado con éxito según la condición dada. Luego, puede usar el operador $and
y recuperar los documentos según la condición.
En este artículo, se explica en detalle la consulta con múltiples condiciones usando múltiples documentos en MongoDB usando el operador $and
y $or
.