¿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.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?