Operadores de Comparación en MongoDB: Mayor, Menor e Igualdad

Clase 19 de 30Curso de Introducción a MongoDB

Contenido del curso

Fundamentos de MongoDB

Operadores

Resumen

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.