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:

  1. $match: Filtra els documents per complir amb criteris específics.
  2. $group: Agrupa documents per un camp específic i pot realitzar operacions d'agregació en els grups.
  3. $project: Modifica l'estructura dels documents, incloent o excloent camps.
  4. $sort: Ordena els documents.
  5. $limit: Limita el nombre de documents que passen a la següent etapa.
  6. $skip: Salta un nombre específic de documents.
  7. $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:

  1. Filtri les comandes que tenen l'estat "shipped".
  2. Descomposi els elements de la comanda en documents individuals.
  3. Agrupi els documents per producte i calculi la quantitat total venuda de cada producte.
  4. 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

  1. $match: Filtra les comandes per incloure només aquelles amb l'estat "shipped".
  2. $unwind: Descompon l'array items en documents individuals, de manera que cada element de la comanda es converteix en un document separat.
  3. $group: Agrupa els documents per producte i calcula la quantitat total venuda de cada producte utilitzant l'operador $sum.
  4. $sort: Ordena els resultats per la quantitat total venuda en ordre descendent.

Exercici Pràctic

Enunciat

Crea un pipeline que faci el següent:

  1. Filtri les comandes que tenen un total superior a 500.
  2. Descomposi els elements de la comanda en documents individuals.
  3. Agrupi els documents per client i calculi la despesa total de cada client.
  4. 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ó

  1. $match: Filtra les comandes per incloure només aquelles amb un total superior a 500.
  2. $unwind: Descompon l'array items en documents individuals.
  3. $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.
  4. $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.

© Copyright 2024. Tots els drets reservats