2.11. Agregacions a MongoDB
Per treballar a fons amb els elements d’un array és millor utilitzar el framework aggregation que ens permet MongoDB, moltes opcions i realitzar tubs pipelines per gestionar la informació emmagatzemada.
Operacions d’agregacions
Les operacions d’agregació són eines de MQL que ens ajuden a processar documents i a retornar resultats calculats. Les operacions d’agregació s’utilitzen majoritàriament per:
- Agrupar valors de diversos documents.
- Processar i operar per al retorn de resultats.
- Analitzar canvis de dades al llarg del temps.
Tubs i transformacions
Per realitzar el processament de documents, MongoDB es basa en el patró de filtre de tubs, utilitzat comunament en arquitectures de programari. Aquest patró consta d’una o més etapes, on cada etapa realitza una operació amb les dades d’entrada, i la sortida o resultat l’entrega a la següent etapa per al seu processament.
Per aplicar aquest patró, MongoDB utilitza una sèrie d’operadors ja definits per poder processar documents.
Els operadors més utilizats en tubs:
- Filtratge de documents amb criteris:
$match. - Ordre de documents:
$sort. - Selecció de camps en específic:
$project. - Agrupació de documents:
$group. - Treure els elements d’un array:
$unwind.
Caldria un altre curs per aprofundir en totes les opcions que ens ofereix MongoDB.
Vegem un exemple d’una operació d’agregació. La funció aggregate().
Entre moltes altres opcions, aggregate ens permet treure els elements d’un array amb l’operador $unwind, fer agrupacions amb $group i comptar amb $sum.
Anem a comptar quants gens conté cada fil de l’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" : "-", "quantitat" : 3894 }
{ "_id" : "+", "quantitat" : 4073 }
>
>
>