MongoDB Aggregation Framework

MongoDBAggregationFrameworkComenzamos aquí una serie de posts destinados a comprender cómo trabajar con el Aggregation Framework.

En mi post Primeros pasos con MongoDB pudimos ver cómo realizar las consultas básicas sobre la base de datos. Por lo tanto, es el momento adecuado para dar un paso adelante y aprender cómo extraer de los datos información agregada.

Este es el índice que vamos a seguir:

  • Filosofía
  • Características del Aggregation Framework
  • Límites
  • Sintaxis
  • Comparativa MongoDB vs SQL
  • Resumen
  • Single purpose
  • Ejemplos

Filosofía

Este framework nos permite procesar nuestros datos para obtener resultados, que podremos leer en forma de cursor o guardar en una nueva colección si deseamos hacer un uso posterior de ellos.

La forma de trabajar con este framework está basada en pasos. Podemos pensar en un paso como una caja que realiza una única función, a la que le entran una serie de datos (documentos) y de la que salen otros datos (documentos) ya procesados. El número de documentos que entra no tiene por qué ser igual al número de documentos que sale.

Podemos encadenar tantas pasos (cajas) como sea necesario hasta llegar al resultado que deseamos, de tal forma que la salida de un paso es la entrada del siguiente.

Este es el concepto fundamental en el que se basa el Aggregation Framework y que debemos comprender para poder hacer un buen uso del mismo.

Características del Aggregation Framework

  • El procesamiento de los datos se hace en memoria RAM.
  • Puede utilizar índices para mejorar el rendimiento en las diversas etapas. Además, tiene una fase interna de optimización.
  • Se ejecuta en código nativo escrito en C++
  • Flexible, funcional y fácil de aprender.
  • El comando aggregate opera sobre una única colección. Map-Reduce es la herramienta que pone MongoDB a nuestro alcance para salvar esta restricción.
  • El Aggregation Framework puede trabajar sobre colecciones particionadas.

Límites

Result Size

Si la salida de nuestro comando aggregate devuelve un sólo documento este no podrá sobrepasar los 16 megabytes, que es el tamaño máximo establecido para los documentos BSON. No existe este límite si la salida se devuelve en forma de cursor o se guarda en una colección.

Memory restrictions

Un stage (paso) no puede consumir más de 100 megabytes de RAM. Para procesar cantidades grandes de datos que superen esta cifra deberemos habilitar la opción de creación de archivos temporales en disco:

Sintaxis

La sintaxis del framework es la siguiente:

Los distintos stages están dentro de un array. Todos los stages pueden aparecer más de una vez, excepto $out y $geoNear.

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

2 + 7 =