Uso de operadores set y project en MongoDB para formateo de datos

Clase 9 de 21Curso de MongoDB: Aggregation Framework

Resumen

¿Qué es el operador set?

El operador set en MongoDB es una herramienta poderosa para dar formato y modelar el resultado de tus consultas agregadas. Similar al operador project, set te permite definir campos para el resultado final. Sin embargo, a diferencia de project, set no excluye automáticamente los campos al no especificarlos, haciendo que todos los campos existentes desde la última etapa del pipeline se mantengan a menos que se indique lo contrario. Esto puede optimizar el tiempo al crear agregaciones.

¿Cuándo usar set en lugar de project?

  • Utiliza set cuando quieras agregar, modificar o generar ciertos campos basados en otros campos.
  • Prefiere project para modificaciones radicales donde necesitas controlar completamente el documento resultante.

La elección entre ambos depende de la complejidad del documento original y de cómo deseas presentarlo al final.

¿Cómo implementar el operador set en MongoDB Compass?

Para ejemplificar el uso del operador set, vamos a trabajar desde MongoDB Compass. Comenzaremos eliminando cualquier implementación previa del operador project.

{
  $set: {
    tipoDePropiedad: "$_id",
    cantidadDePropiedades: "$cantidad",
    precioPromedio: { $round: ["$precioMedia", 2] },
    propiedadesDestacadas: [
      {
        tipo: "Más baja",
        nombre: "$masBaja.name",
        precio: "$masBaja.price"
      },
      {
        tipo: "Más alta",
        nombre: "$masAlta.name",
        precio: "$masAlta.price"
      }
    ]
  }
}

Formateo de números con decimales

MongoDB proporciona operadores como $round para ajustar resultados numéricos. Por ejemplo, si deseas que el precio promedio tenga solo dos decimales para un formato visual más limpio, puedes utilizar el siguiente enfoque:

precioPromedio: { $round: ["$precioMedia", 2] }

Creación de nuevos campos con set

Genera campos nuevos agrupando datos en objetos o arrays. En el ejemplo anterior, creamos un array propiedadesDestacadas que contiene objetos con información sobre las propiedades más baratas y más caras.

propiedadesDestacadas: [
  { tipo: "Más baja", nombre: "$masBaja.name", precio: "$masBaja.price" },
  { tipo: "Más alta", nombre: "$masAlta.name", precio: "$masAlta.price" }
]

Este enfoque ofrece una manera flexible de agregar información relevante.

Combinación de set y project

Para excluir campos no deseados en el resultado final, se puede combinar set con project, eliminando duplicaciones de información innecesaria:

{
  $project: {
    _id: 0,
    precioMedia: 0,
    cantidad: 0,
    masBaja: 0,
    masAlta: 0
  }
}

Esta técnica asegura que solo los campos configurados mediante set se incluyan en el reporte final.

Ejercicio práctico: convertir precios a otra moneda

Aprovechando los conceptos adquiridos, te sugiero un emocionante reto: intenta mostrar precios en una moneda diferente, por ejemplo, convertir de dólares a euros. Esto te permitirá practicar la transformación de datos y enriquecimiento de resultados finales.

Explora, experimenta y comparte tus hallazgos en los comentarios. Así, impulsamos el aprendizaje colaborativo y extendemos nuestros conocimientos.