El marc d'agregació de MongoDB és una eina poderosa per processar dades i obtenir informació significativa a partir de col·leccions de documents. A diferència de les operacions CRUD bàsiques, el marc d'agregació permet realitzar operacions més complexes com filtres, transformacions, agrupacions i ordenacions de dades.
Conceptes Clau
Abans de començar amb exemples pràctics, és important entendre alguns conceptes clau del marc d'agregació:
- Pipeline d'Agregació: Una seqüència d'estadis que processa documents d'una col·lecció. Cada estadi transforma els documents i passa els resultats al següent estadi.
- Estadis d'Agregació: Operacions individuals dins del pipeline que realitzen tasques específiques com filtrar, projectar, agrupar, etc.
- Expressions d'Agregació: Utilitzades dins dels estadis per calcular valors, crear nous camps, etc.
Principals Estadis d'Agregació
A continuació, es presenten alguns dels estadis més utilitzats en el marc d'agregació:
- $match: Filtra els documents per complir amb criteris específics.
- $group: Agrupa documents per un camp específic i pot calcular valors agregats com sumes, mitjanes, etc.
- $project: Utilitzat per incloure, excloure o crear nous camps en els documents.
- $sort: Ordena els documents per un camp específic.
- $limit: Limita el nombre de documents que passen a l'estadi següent.
- $skip: Salta un nombre específic de documents.
Exemples Pràctics
Exemple 1: Filtrar i Projectar Documents
Suposem que tenim una col·lecció orders
amb documents que contenen informació sobre comandes. Volem obtenir només les comandes que tenen un import superior a 100 i projectar només els camps orderId
i total
.
db.orders.aggregate([ { $match: { total: { $gt: 100 } } }, { $project: { _id: 0, orderId: 1, total: 1 } } ])
Explicació:
- $match: Filtra els documents on el camp
total
és superior a 100. - $project: Inclou només els camps
orderId
itotal
en els resultats, excloent el camp_id
.
Exemple 2: Agrupar i Calcular Valors Agregats
Volem agrupar les comandes per customerId
i calcular la suma total de les comandes per cada client.
Explicació:
- $group: Agrupa els documents per
customerId
i calcula la suma del camptotal
per cada grup, emmagatzemant el resultat en un nou camptotalAmount
.
Exemple 3: Ordenar i Limitar Resultats
Volem obtenir les 5 comandes més recents ordenades per la data de creació (createdAt
).
Explicació:
- $sort: Ordena els documents per
createdAt
en ordre descendent. - $limit: Limita els resultats als 5 primers documents.
Exercicis Pràctics
Exercici 1: Filtrar i Agrupar
Objectiu: Filtrar les comandes que tenen un estat de "completed" i agrupar-les per productId
per calcular la quantitat total venuda de cada producte.
Solució:
db.orders.aggregate([ { $match: { status: "completed" } }, { $group: { _id: "$productId", totalSold: { $sum: "$quantity" } } } ])
Exercici 2: Projectar i Ordenar
Objectiu: Projectar només els camps customerId
i total
de les comandes, i ordenar-les per total
en ordre ascendent.
Solució:
Errors Comuns i Consells
- No oblidar el camp
_id
en el $project: Per defecte, el camp_id
sempre s'inclou en els resultats. Si no es vol incloure, cal excloure'l explícitament. - Ordre dels estadis: L'ordre dels estadis en el pipeline és crucial. Per exemple, és més eficient filtrar documents primer amb
$match
abans d'ordenar-los amb$sort
. - Expressions d'Agregació: Utilitza expressions d'agregació per realitzar càlculs complexos dins dels estadis, com
$sum
,$avg
,$min
,$max
, etc.
Conclusió
El marc d'agregació de MongoDB és una eina molt potent per processar i analitzar dades. Amb els estadis d'agregació, es poden realitzar operacions complexes de manera eficient. Practicar amb diferents combinacions d'estadis i expressions d'agregació ajudarà a dominar aquesta funcionalitat i a obtenir informació valuosa de les dades emmagatzemades a MongoDB.
Curs de MongoDB
Mòdul 1: Introducció a MongoDB
Mòdul 2: Operacions CRUD a MongoDB
Mòdul 3: Modelatge de Dades a MongoDB
Mòdul 4: Indexació i Agregació
Mòdul 5: Funcions Avançades de MongoDB
Mòdul 6: Rendiment i Seguretat
- Optimització del Rendiment
- Còpia de Seguretat i Restauració
- Millors Pràctiques de Seguretat
- Monitorització i Alertes