No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Tranformando los datos con $group

6/21
Recursos

¿Cómo realizar operaciones avanzadas con el operador Group en MongoDB?

¿Te has preguntado cómo encontrar la propiedad más barata y la más cara dentro de un conjunto de propiedades en Estados Unidos, clasificadas por tipo? MongoDB proporciona una potente herramienta para realizar operaciones como esta: el Aggregation Framework, específicamente el operador Group. En esta ocasión, profundizaremos en su uso.

¿Qué es el operador Group?

El operador Group de MongoDB es una herramienta poderosa utilizada para agrupar documentos mediante un campo o expresión y para realizar operaciones de agregación como sumas, promedios o buscar el primer y último elemento.

¿Cómo se filtran propiedades por país utilizando el operador Match?

Para comenzar, es esencial filtrar las propiedades ubicadas exclusivamente en Estados Unidos. Esto se realiza mediante el operador Match en una etapa inicial del pipeline de agregación:

{
  $match: {
    "Address.Country Code": "US"
  }
}

Esta instrucción asegúrate de que solamente se procesen las propiedades en Estados Unidos.

¿Cómo ordenar propiedades antes de agruparlas?

Antes de hallar la propiedad más económica y la más cara, es crucial ordenar los documentos. Utiliza el operador Sort para ordenar por tipo de propiedad y precio:

{
  $sort: {
    "Property Type": 1,
    "Price": 1
  }
}

La instrucción anterior ordena las propiedades primero por tipo de propiedad y dentro de cada tipo, por precio, de menor a mayor.

¿Cómo agrupar propiedades y encontrar las más baratas y caras?

El centro de este reto es usar el operador Group. Este operador requiere dos etapas: sobre cuál campo agrupar, y qué operaciones realizar sobre los agrupamientos.

  1. Especificando el campo de agrupación:

    {
      $group: {
        _id: "$Property Type"
      }
    }
    

    En este paso, les indicamos que agrupen por el campo Property Type.

  2. Definiendo las operaciones de agregación:

    Aquí se utiliza el operador de acumulación first para obtener la propiedad más barata y last para la más cara:

    {
      $group: {
        _id: "$Property Type",
        "Más Bajo": {
          $first: {
            "Nombre": "$Name",
            "Precio": "$Price",
            "Dirección": "$Address"
          }
        },
        "Más Alto": {
          $last: {
            "Nombre": "$Name",
            "Precio": "$Price",
            "Dirección": "$Address"
          }
        }
      }
    }
    
    • Más Bajo usa $first para capturar el primer elemento del grupo.
    • Más Alto usa $last para obtener el último elemento del grupo.

Conclusiones y recomendaciones

Utilizando el operator Group, hemos extraído el primer y último elemento de cada categoría de tipo de propiedad. Lo fascinante es que todo esto se realizó sin alterar los datos originales almacenados en MongoDB. Los cambios existen solamente en el pipeline de agregación.

El operador Group es extremadamente versátil y te permite manipular datos de formas profundas y significativas. Así que, ¿por qué no experimentar con diferentes métodos de agrupación? Juega con las opciones, realiza tus propios experimentos y comparte tus hallazgos. La práctica y exploración constante son claves para dominar herramientas de análisis de datos como esta.

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aqui mi codigo usando $group

use("sample_airbnb")

db.listingsAndReviews.aggregate(
[

    {
      $match:{
          "address.country_code": "US",
        },
    },
    {
      $sort:{
          property_type: 1,
          price: 1
        },
    },
    {
      $group: {
        _id: "$property_type",
        "masBajo": {
            $first: {
                "nombre": "$name",
                "precio": "$price",
                "direccion": "$address"
            }
        },
        "masAlto":{
            $last: {
                "nombre": "$name",
                "precio": "$price",
                "direccion": "$address"
            }
        }
      }
    },
  ]
)
Los operadores de acumulación en MongoDB Aggregation Framework, como `$sum`, `$avg`, `$min`, `$max` y `$push`, sirven para realizar cálculos sobre un conjunto de documentos agrupados. Por ejemplo, `$sum` suma valores de un campo específico, mientras que `$avg` calcula el promedio. Estos operadores permiten extraer información valiosa y resumir grandes volúmenes de datos, facilitando análisis más profundos y decisiones estratégicas basadas en esos datos. Son esenciales para transformar información detallada en insights clave dentro de tus consultas.
Como puedo convertir un string q esta mal guardado en un json, con una consulta y hacer un filtrado por una de sus subpropiedades ?? Gracias
Otro ejemplo: ![](https://static.platzi.com/media/user_upload/image-96b6a3dc-c889-4e0a-8d30-5b1fa9a0a081.jpg)
```js // buscar la propiedad mas barata y la mas cara de cada tipo de propiedad en Estados Unidos // agrupar solo es posible con aggregation framework use("sample_airbnb") db.listingsAndReviews.aggregate([ { $match: {"address.country_code": "US"}, }, { $sort:{ "property_type": 1, "price": 1}, }, { $group: { _id: "$property_type", // agrupar por tipo de propiedad "masBajo": { $first: { // primer elemento (mas barato) "nombre": "$name", "precio": "$price" } }, "masAlto":{ $last: { // ultimo elemento (mas caro) "nombre": "$name", "precio": "$price" } } } }, ]) ```

Un recurso para revisar sobre el framework de aggregation:
https://www.practical-mongodb-aggregations.com/front-cover.html