En aquest tema, aprendrem a utilitzar pipelines en MongoDB per processar i transformar dades de manera eficient. Els pipelines són una part fonamental del marc d'agregació de MongoDB, que permeten realitzar operacions complexes en col·leccions de dades.
Què és un Pipeline?
Un pipeline és una seqüència d'etapes que processa documents en una col·lecció. Cada etapa pren els documents d'entrada, els transforma i passa els resultats a la següent etapa. Aquest procés continua fins que s'han aplicat totes les etapes del pipeline.
Etapes Comunes en un Pipeline
A continuació, es mostren algunes de les etapes més comunes que es poden utilitzar en un pipeline:
- $match: Filtra els documents per complir amb criteris específics.
- $group: Agrupa documents per un camp específic i pot realitzar operacions d'agregació en els grups.
- $project: Modifica l'estructura dels documents, incloent o excloent camps.
- $sort: Ordena els documents.
- $limit: Limita el nombre de documents que passen a la següent etapa.
- $skip: Salta un nombre específic de documents.
- $unwind: Descompon arrays en documents individuals.
Exemple Pràctic
Vegem un exemple pràctic d'un pipeline que utilitza diverses etapes per processar una col·lecció de dades.
Col·lecció d'Exemple
Suposem que tenim una col·lecció orders
amb la següent estructura:
{ "_id": 1, "customer": "John Doe", "items": [ { "product": "Laptop", "quantity": 1, "price": 1000 }, { "product": "Mouse", "quantity": 2, "price": 25 } ], "total": 1050, "status": "shipped" }
Pipeline d'Exemple
Volem crear un pipeline que faci el següent:
- Filtri les comandes que tenen l'estat "shipped".
- Descomposi els elements de la comanda en documents individuals.
- Agrupi els documents per producte i calculi la quantitat total venuda de cada producte.
- Ordeni els resultats per quantitat venuda en ordre descendent.
db.orders.aggregate([ { $match: { status: "shipped" } }, { $unwind: "$items" }, { $group: { _id: "$items.product", totalQuantity: { $sum: "$items.quantity" } } }, { $sort: { totalQuantity: -1 } } ])
Explicació del Pipeline
- $match: Filtra les comandes per incloure només aquelles amb l'estat "shipped".
- $unwind: Descompon l'array
items
en documents individuals, de manera que cada element de la comanda es converteix en un document separat. - $group: Agrupa els documents per producte i calcula la quantitat total venuda de cada producte utilitzant l'operador
$sum
. - $sort: Ordena els resultats per la quantitat total venuda en ordre descendent.
Exercici Pràctic
Enunciat
Crea un pipeline que faci el següent:
- Filtri les comandes que tenen un total superior a 500.
- Descomposi els elements de la comanda en documents individuals.
- Agrupi els documents per client i calculi la despesa total de cada client.
- Ordeni els resultats per despesa total en ordre descendent.
Solució
db.orders.aggregate([ { $match: { total: { $gt: 500 } } }, { $unwind: "$items" }, { $group: { _id: "$customer", totalSpent: { $sum: { $multiply: ["$items.quantity", "$items.price"] } } } }, { $sort: { totalSpent: -1 } } ])
Explicació de la Solució
- $match: Filtra les comandes per incloure només aquelles amb un total superior a 500.
- $unwind: Descompon l'array
items
en documents individuals. - $group: Agrupa els documents per client i calcula la despesa total de cada client utilitzant l'operador
$sum
i$multiply
per multiplicar la quantitat pel preu de cada element. - $sort: Ordena els resultats per la despesa total en ordre descendent.
Conclusió
Els pipelines en MongoDB són una eina poderosa per processar i transformar dades de manera eficient. Mitjançant l'ús de diverses etapes, podem realitzar operacions complexes en col·leccions de dades. Practicar amb diferents etapes i combinacions de pipelines és essencial per dominar aquesta funcionalitat i aplicar-la en situacions del món real.
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