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ó:

  1. 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.
  2. Estadis d'Agregació: Operacions individuals dins del pipeline que realitzen tasques específiques com filtrar, projectar, agrupar, etc.
  3. 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ó:

  1. $match: Filtra els documents per complir amb criteris específics.
  2. $group: Agrupa documents per un camp específic i pot calcular valors agregats com sumes, mitjanes, etc.
  3. $project: Utilitzat per incloure, excloure o crear nous camps en els documents.
  4. $sort: Ordena els documents per un camp específic.
  5. $limit: Limita el nombre de documents que passen a l'estadi següent.
  6. $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 i total 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.

db.orders.aggregate([
    { $group: { _id: "$customerId", totalAmount: { $sum: "$total" } } }
])

Explicació:

  • $group: Agrupa els documents per customerId i calcula la suma del camp total per cada grup, emmagatzemant el resultat en un nou camp totalAmount.

Exemple 3: Ordenar i Limitar Resultats

Volem obtenir les 5 comandes més recents ordenades per la data de creació (createdAt).

db.orders.aggregate([
    { $sort: { createdAt: -1 } },
    { $limit: 5 }
])

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ó:

db.orders.aggregate([
    { $project: { _id: 0, customerId: 1, total: 1 } },
    { $sort: { total: 1 } }
])

Errors Comuns i Consells

  1. 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.
  2. 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.
  3. 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.

© Copyright 2024. Tots els drets reservats