L'Aggregation Framework di MongoDB: Analisi Dati Potente

MongoDB

Le query di ricerca (`find()`) sono perfette per trovare documenti. Ma cosa succede se hai bisogno di eseguire analisi più complesse, come "calcolare il totale delle vendite per ogni categoria di prodotto" o "trovare il voto medio per ogni ristorante in una città"? Per questo tipo di operazioni, MongoDB offre un potentissimo strumento: l'Aggregation Framework.

Cos'è una Pipeline di Aggregazione?

L'Aggregation Framework funziona tramite il concetto di pipeline (conduttura). Una pipeline è una sequenza di "stadi" (stages). I documenti di una collezione entrano nel primo stadio, vengono processati, e il loro output diventa l'input per lo stadio successivo, e così via, fino alla fine della pipeline. È come una catena di montaggio per i tuoi dati.

Gli Stadi più Comuni

Esistono decine di operatori di pipeline, ma i più usati sono:

  • `$match`: Filtra i documenti, passando allo stadio successivo solo quelli che corrispondono a una determinata condizione. È simile al `find()`. È buona pratica metterlo all'inizio della pipeline per ridurre il numero di documenti da processare.
  • `$group`: Raggruppa i documenti in base a un "ID" (un campo o un'espressione) e permette di calcolare valori aggregati per ogni gruppo. È l'equivalente del `GROUP BY` in SQL. Puoi usare "accumulatori" come `$sum`, `$avg`, `$max`, `$min`.
  • `$sort`: Ordina i documenti passati dallo stadio precedente.
  • `$limit`: Limita il numero di documenti che passano allo stadio successivo.
  • `$project`: Rimodella i documenti. Permette di selezionare i campi da includere o escludere, rinominarli o creare nuovi campi calcolati.
  • `$lookup`: Esegue un'operazione simile a un `LEFT JOIN` di SQL, permettendo di unire documenti da un'altra collezione.

Esempio Pratico

Immagina una collezione `orders` con documenti che hanno un campo `status` ("shipped", "pending") e `totalAmount`. Per calcolare il totale delle vendite per ogni stato, la pipeline sarebbe:

db.orders.aggregate([
  { $match: { status: { $in: ["shipped", "completed"] } } },
  { $group: { _id: "$status", totalSales: { $sum: "$totalAmount" } } }
])

Il primo stadio (`$match`) seleziona solo gli ordini completati. Il secondo (`$group`) li raggruppa per stato e somma i loro totali. L'Aggregation Framework trasforma MongoDB da un semplice data store a un potente strumento di analisi dati.

Hai bisogno di una soluzione su misura?

Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.

Richiedi una consulenza