2.11. Agregaciones en MongoDB
Para trabajar a fondo con los elementos de un array es mejor utilizar el framework aggregation que nos permite MongoDB muchas opciones y realizar tuberías pipelines para gestionar la información almacenada.
Operaciones de agregaciones
Las operaciones de agregación son herramientas de MQL que nos ayudan a procesar documentos y a retornar resultados calculados. Las operaciones de agregación se utilizan mayoritariamente para:
- Agrupar valores de varios documentos.
- Procesamiento y operaciones para el retorno de resultados.
- Analizar cambios de datos a lo largo del tiempo.
Tuberías y transformaciones
Para realizar el procesamiento de documentos, MongoDB se basa en el patrón de filtro de tubería, utilizado comúnmente en arquitecturas de software. Este patrón consta de una o más etapas, en donde cada etapa efectúa una operación con los datos de entrada, y la salida o resultado se la entrega a la siguiente etapa para su procesamiento.
Para aplicar este patrón, MongoDB utiliza una serie de operadores ya definidos para poder procesar documentos.
Los operadores más utilizados en tuberías:
- Filtrado de documentos con criterios:
$match. - Orden de documentos:
$sort. - Selección de campos en específico:
$project. - Agrupación de documentos:
$group. - Sacar los elementos de un array:
$unwind.
Sería necesario otro curso para profundizar en todas las opciones que nos ofrece MongoDB.
Veamos un ejemplo de una operación de agregación. La función aggregate().
Entre muchas otras opciones, aggregate nos permite sacar los elementos de un array con el operador $unwind, hacer agrupaciones con $group y contar con $sum.
Vamos a contar cuántos genes contiene cada hebra del ADN del cromosoma 1.
db.getCollection('chr1').aggregate([{$unwind:"$knownGene"},{$group:{_id:"$knownGene.strand",cantidad:{$sum:1}}}])
> db.getCollection('chr1').aggregate([{$unwind: "$knownGene"},{$group:{_id: "$knownGEne.strand",cantidad:{$sum:1}}}]);
{ "_id" : "-", "cantidad" : 3894 }
{ "_id" : "+", "cantidad" : 4073 }
>
>
>