No tienes acceso a esta clase

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

Agrupación de Datos con MongoDB: Uso de Bucket y Bucket Auto

18/21
Recursos

¿Cómo se pueden clasificar los datos en MongoDB de manera eficiente?

En el manejo de bases de datos, especialmente con grandes volúmenes de información, es esencial realizar tareas como separar, agrupar y discriminar documentos. Mientras que con el operador Match podemos separar datos bajo ciertos criterios, existen métodos más optimizados como Bucket y Bucket Auto en MongoDB, que permiten realizar estas funciones de manera más automática y con menos código.

¿Cómo utiliza Bucket para crear rangos?

El operador Bucket permite agrupar datos por rangos específicos, que nosotros definimos manualmente. Aquí se explica cómo configurar y ejecutar el operador Bucket:

  1. GroupBy: Especificamos el campo sobre el cual queremos trabajar. Por ejemplo, se puede utilizar un campo que contenga calificaciones.
  2. Definir límites: Establecemos los rangos manualmente mediante un arreglo. Por ejemplo, [0, 50, 70, 85, 100].
  3. Default: Se debe definir qué hacer con los documentos que no se ajusten a los rangos especificados. Esto se configura con la opción default.
  4. Resultado esperado: Configuramos el resultado deseado, por ejemplo, contar cuántos documentos caen dentro de cada rango.
{
  $bucket: {
    groupBy: "$campo_de_calificaciones",
    boundaries: [0, 50, 70, 85, 100],
    default: "Otros",
    output: {
      cuenta: { $sum: 1 }
    }
  }
}

¿Cómo funciona Bucket Auto y en qué se diferencia?

Bucket Auto simplifica aún más el proceso. En lugar de especificar manualmente los límites de los rangos, permite a MongoDB determinar estos rangos automáticamente, solo especificando cuántos grupos deseamos.

  1. Definición de grupos: Simplemente proporcionamos el número de grupos que deseamos.
  2. Ausencia de default y boundaries: No necesitamos preocuparnos por los valores por defecto o definir límites manualmente.
{
  $bucketAuto: {
    groupBy: "$campo_de_calificaciones",
    buckets: 4,
    output: {
      cuenta: { $sum: 1 }
    }
  }
}

El resultado es que Bucket Auto también proporciona valores mínimos y máximos para cada grupo creado.

¿Cuáles son las recomendaciones al utilizar Bucket y Bucket Auto?

  1. Uso intencional de Bucket Auto: Debemos estar conscientes de que el algoritmo de MongoDB puede no coincidir con la distribución que se busca; úselo sabiamente.
  2. Límites ascendentes en Bucket: Asegúrate de que los límites estén en orden ascendente y correspondan a los intervalos de tu campo de datos.
  3. Gestión del default: Es vital manejar correctamente la llave default en Bucket para evitar errores.
  4. Personalización del salida: Podemos personalizar los resultados finales usando operadores como Average para obtener medias o realizar otros cálculos.

Animamos a los estudiantes a explorar y compartir sus experiencias. ¿Cómo personalizarías estos operadores para obtener una salida diferente? ¡Esperamos tus comentarios y sugerencias!

Aportes 5

Preguntas 0

Ordenar por:

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

Codigo visto en clase

// bucket.mongodb

use('sample_airbnb')

db,listingsAndRevies.aggregate([
    {
        bucket: {
            groupBy: {"$review_scores.review_scores_rating"},
            boundaries: [0, 50, 70, 85, 100],
            default: "N/A",
            output: {
                count: {$sum: 1}
            }
        }
    }
])

/// BucketAuto.mongodb

use('sample_airbnb')

db.listingsAndReviews.aggregate([
    {
        $bucketAuto: {
            groupBy: "$review_scores.review_scores_rating",
            buckets: 4,
            output: {
                count: { $sum: 1 }
            }
        }
    }
])

```js use('football') db.scorers.aggregate([ { $bucketAuto: { groupBy: '$goles', buckets: 5, output: { count: {$sum: 1} } } } ]) ```![](https://static.platzi.com/media/user_upload/image-45c7d39c-1458-45b6-ae13-c7e1178ba1b2.jpg)

Ejemplo con $bucketauto

var db=db.getSiblingDB("sample_airbnb")

db.listingsAndReviews.aggregate([
    {
        //similar al operador $match
        $bucketAuto:{
            groupBy: "$review_scores.review_scores_rating", //campo de referencia
            buckets: 4,
            granularity: R20
            output:{
                count:{$sum: 1}
            }
        }
    }

]
);

Para cumplir el reto utilice el operador $addToSet.

$bucket

var db=db.getSiblingDB("sample_airbnb")

db.listingsAndReviews.aggregate([
    {
        //similar al operador $match
        $bucket:{
            groupBy: "$review_scores.review_scores_rating", //campo de referencia
            boundaries:[0,50,70,85,100],
            default: "N/A",
            output:{
                count:{$sum: 1},
                tipopropiedad:{ $addToSet: "$property_type" }
            }
        }
    }

]
);

Los operadores $bucket y $bucketAuto son agrupaciones automaticos por rangos, creando subcolecciones.

$Bucket:

  • Se especifican los rangos que se desea usar.
  • Es necesario la palabra reservada “default”, para considerar excepciones.
  • Los limites (“boundaries”) tienen que estar ascendemente, y estos campos tienen que estar en la colección.
  • utiliza diferentes operadores

$bucketAuto:

  • MongoDB distribuye de manera automática el resultado de la colección.