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.