Cómo utilizar el canal de agregación en MongoDB

Cómo utilizar el canal de agregación en MongoDB
Lectores como usted ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

La canalización de agregación es la forma recomendada de ejecutar consultas complejas en MongoDB. Si ha estado utilizando MapReduce de MongoDB, será mejor que cambie al canal de agregación para realizar cálculos más eficientes.





MUO Vídeo del día DESPLÁCETE PARA CONTINUAR CON EL CONTENIDO

¿Qué es la agregación en MongoDB y cómo funciona?

  Bosquejo del proceso de canalización de agregación

El proceso de agregación es un proceso de varias etapas para ejecutar aplicaciones avanzadas consultas en mongodb . Procesa datos a través de diferentes etapas llamadas canalización. Puede utilizar los resultados generados en un nivel como plantilla de operación en otro.





Por ejemplo, puede pasar el resultado de una operación de coincidencia a otra etapa para ordenarlo en ese orden hasta obtener el resultado deseado.





¿Cuándo obtendrá Android nuevos emojis?

Cada etapa de un proceso de agregación presenta un operador MongoDB y genera uno o más documentos transformados. Dependiendo de su consulta, un nivel puede aparecer varias veces en el proceso. Por ejemplo, es posible que necesite utilizar el $cuenta o $ordenar El operador realiza etapas más de una vez a lo largo del proceso de agregación.

Las etapas del proceso de agregación

La canalización de agregación pasa datos a través de varias etapas en una sola consulta. Hay varias etapas y puedes encontrar sus detalles en el Documentación de MongoDB .



Definamos a continuación algunos de los más utilizados.

La etapa de $match

Esta etapa le ayuda a definir condiciones de filtrado específicas antes de comenzar las otras etapas de agregación. Puede usarlo para seleccionar los datos coincidentes que desea incluir en el proceso de agregación.





La etapa de $grupo

La fase de grupos separa los datos en diferentes grupos según criterios específicos utilizando pares clave-valor. Cada grupo representa una clave en el documento de salida.

Por ejemplo, considere lo siguiente ventas Data de muestra:





  Datos de muestra, por ejemplo.

Utilizando el canal de agregación, puede calcular el recuento de ventas totales y las ventas principales para cada sección de producto:

 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

El _id: $Sección El par agrupa el documento de salida según las secciones. Al especificar el top_sales_count y mayores ventas campos, MongoDB crea claves nuevas basadas en la operación definida por el agregador; esto puede ser $ suma , $mínimo , $máx. , o $promedio .

La etapa de $skip

Puedes usar el $ saltar etapa para omitir un número específico de documentos en la salida. Suele ocurrir después de la fase de grupos. Por ejemplo, si espera dos documentos de salida pero omite uno, la agregación solo generará el segundo documento.

Para agregar una etapa de salto, inserte el $ saltar operación en el pipeline de agregación:

 ..., 
{
    $skip: 1
  },

La etapa $sort

La etapa de clasificación le permite organizar los datos en orden descendente o ascendente. Por ejemplo, podemos ordenar los datos del ejemplo de consulta anterior en orden descendente para determinar qué sección tiene las mayores ventas.

Añade el $ordenar operador a la consulta anterior:

 ..., 
{
    $sort: {top_sales: -1}
  },

La etapa del límite de $

La operación de límite ayuda a reducir la cantidad de documentos de salida que desea que muestre el canal de agregación. Por ejemplo, utilice el límite de $ operador para obtener la sección con mayores ventas devueltas por la etapa anterior:

 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

Lo anterior devuelve sólo el primer documento; esta es la sección con mayores ventas, ya que aparece en la parte superior de la salida ordenada.

La etapa del proyecto $

El $proyecto La etapa le permite darle forma al documento de salida como desee. Utilizando el $proyecto operador, puede especificar qué campo incluir en la salida y personalizar su nombre clave.

Por ejemplo, una salida de muestra sin el $proyecto El escenario se ve así:

  Muestra de datos no organizados para canalización de agregación

Veamos cómo se ve con el $proyecto escenario. Para agregar el $proyecto al oleoducto:

 ..., 

{
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }

Dado que anteriormente agrupamos los datos según las secciones de productos, lo anterior incluye cada sección de producto en el documento de salida. También garantiza que el recuento de ventas agregadas y las ventas principales aparezcan en la salida como TotalVendido y TopVenta .

cómo activar el modo retrato del iphone 7

El resultado final es mucho más limpio en comparación con el anterior:

  Salida de muestra para las etapas del proceso de agregación

La etapa de $descanso

El $descansar La etapa divide una matriz dentro de un documento en documentos individuales. Toma lo siguiente Pedidos datos, por ejemplo:

  Datos de pedidos de muestra

Utilizar el $descansar escenario para deconstruir el elementos matriz antes de aplicar otras etapas de agregación. Por ejemplo, desenrollar el elementos La matriz tiene sentido si desea calcular los ingresos totales de cada producto:

 db.Orders.aggregate( 
[
  {
    "$unwind": "$items"
  },
  {
    "$group": {
      "_id": "$items.product",
      "total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
    }
  },
  {
    "$sort": { "total_revenue": -1 }
  },

  {
        "$project": {
            "_id": 0,
            "Product": "$_id",
            "TotalRevenue": "$total_revenue",

        }
    }
])

Aquí está el resultado de la consulta de agregación anterior:

  Resultado de muestra para la etapa de desenrollado

Cómo crear una canalización de agregación en MongoDB

Si bien el proceso de agregación incluye varias operaciones, las etapas presentadas anteriormente le dan una idea de cómo aplicarlas en el proceso, incluida la consulta básica para cada una.

Usando el anterior ventas muestra de datos, veamos algunas de las etapas analizadas anteriormente en una sola pieza para obtener una visión más amplia del proceso de agregación:

Windows no arranca en modo seguro
 db.sales.aggregate([ 

    {
        "$match": {
            "Sold": { "$gte": 5 }
            }
    },

        {

        "$group": {
            "_id": "$Section",
            "total_sales_count": { "$sum": "$Sold" },
            "top_sales": { "$max": "$Amount" },
            
        }

    },

    {
        "$sort": { "top_sales": -1 }
    },

    {"$skip": 0},

    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }
    
])

El resultado final se parece a algo que has visto anteriormente:

  Salida de muestra para las etapas del proceso de agregación

Canalización de agregación frente a MapReduce

Hasta su obsolescencia a partir de MongoDB 5.0, la forma convencional de agregar datos en MongoDB era a través de MapReduce. A pesar de MapReduce tiene aplicaciones más amplias Más allá de MongoDB, es menos eficiente que el canal de agregación y requiere secuencias de comandos de terceros para escribir el mapa y reducir las funciones por separado.

La canalización de agregación, por otro lado, es específica únicamente de MongoDB. Pero proporciona una forma más limpia y eficiente de ejecutar consultas complejas. Además de la simplicidad y la escalabilidad de las consultas, las etapas de canalización destacadas hacen que el resultado sea más personalizable.

Hay muchos más diferencias entre el canal de agregación y MapReduce . Los verá cuando cambie de MapReduce al canal de agregación.

Haga que las consultas de Big Data sean eficientes en MongoDB

Su consulta debe ser lo más eficiente posible si desea ejecutar cálculos en profundidad sobre datos complejos en MongoDB. La canalización de agregación es ideal para consultas avanzadas. En lugar de manipular datos en operaciones separadas, lo que a menudo reduce el rendimiento, la agregación le permite empaquetarlos todos dentro de una única canalización de alto rendimiento y ejecutarlos una vez.

Si bien el proceso de agregación es más eficiente que MapReduce, puede hacer que la agregación sea más rápida y eficiente indexando sus datos. Esto limita la cantidad de datos que MongoDB necesita escanear durante cada etapa de agregación.