Cuando trabajas con bases de datos, filtrar documentos por valores numéricos es una de las tareas más frecuentes. En MongoDB, los operadores de comparación $gt, $gte, $lt y $lte te permiten construir consultas precisas para encontrar documentos que cumplan condiciones numéricas específicas, e incluso combinarlas con otros operadores para lograr búsquedas más complejas.
¿Cómo funcionan los operadores greater than y greater than or equal?
Estos dos operadores permiten buscar documentos cuyo valor en un campo sea mayor que o mayor o igual a un número determinado. En MongoDB se representan como $gt (greater than) y $gte (greater than or equal) [01:40].
Por ejemplo, si tienes una colección de inventario con documentos que tienen cantidades de 15, 20, 25, 30 y 20, puedes hacer la siguiente consulta:
mongodb
db.inventory.find({ quantity: { $gt: 20 } })
Esta consulta devuelve solo los documentos con cantidad mayor a 20, es decir, el de 25 y el de 30. El valor 20 queda excluido porque el operador es estrictamente mayor [02:40].
Si necesitas incluir el 20 en los resultados, cambias a $gte:
mongodb
db.inventory.find({ quantity: { $gte: 20 } })
Ahora el resultado incluye los documentos con cantidad 20, 25, 30 y el segundo documento con 20. Solo queda fuera el de 15 [03:20].
¿Qué hacen los operadores less than y less than or equal?
Son el complemento inverso. $lt (less than) busca valores menores que un número, mientras que $lte (less than or equal) busca valores menores o iguales [03:55].
mongodb
db.inventory.find({ quantity: { $lt: 20 } })
Esta consulta devuelve únicamente el documento con cantidad 15, ya que es el único estrictamente menor a 20 [04:20].
Al cambiar a $lte, se incluyen también los documentos con valor 20:
mongodb
db.inventory.find({ quantity: { $lte: 20 } })
El resultado trae los documentos con cantidades 15, 20 y 20, excluyendo el 25 y el 30 [04:40].
¿Cómo combinar operadores para consultas por rangos?
La verdadera potencia aparece cuando combinas varios operadores en una sola consulta. No estás limitado a usar uno solo; puedes construir condiciones compuestas para definir rangos numéricos [05:10].
¿Cómo definir un rango numérico en un solo campo?
Para buscar documentos cuya cantidad esté entre 25 y 35, por ejemplo:
mongodb
db.inventory.find({ quantity: { $gte: 25, $lte: 35 } })
Esta consulta devuelve los documentos con cantidad 25 y 30, que son los únicos dentro de ese rango [05:50].
Otro ejemplo: buscar cantidades entre 20 y 25 excluiría el 15 y el 30:
mongodb
db.inventory.find({ quantity: { $gte: 20, $lte: 25 } })
El resultado incluye los documentos con cantidades 20, 25 y 20 [06:20].
¿Cómo mezclar operadores de rango con filtros en subdocumentos?
Puedes agregar condiciones adicionales a la consulta. Por ejemplo, filtrar por un campo dentro de un subdocumento como item.code y al mismo tiempo aplicar un rango en quantity [07:00]:
mongodb
db.inventory.find({
"item.code": "123",
quantity: { $gte: 20, $lte: 25 }
})
Esta consulta busca documentos donde el código del ítem sea "123" y la cantidad esté entre 20 y 25. Solo devuelve los documentos que cumplen ambas condiciones simultáneamente [08:10].
Incluso puedes incorporar el operador $ne (not equal) para excluir valores específicos:
mongodb
db.inventory.find({
"item.code": { $ne: "123" },
quantity: { $gte: 20, $lte: 25 }
})
Esto retorna documentos cuyo código sea diferente de "123" y cuya cantidad esté en el rango indicado [08:50].
- $gt: valores estrictamente mayores a un número.
- $gte: valores mayores o iguales.
- $lt: valores estrictamente menores.
- $lte: valores menores o iguales.
- Puedes combinar estos cuatro operadores entre sí y con otros como $eq o $ne para construir queries más específicas.
Ahora que conoces estos operadores, experimenta combinándolos en tus propias consultas y comparte qué tipo de filtros has logrado construir.