Questo capitolo introduce la Pipeline di Aggregazione di MongoDB, che è principalmente utilizzata per l'analisi statistica, simile alla dichiarazione group by in SQL. Nella shell di MongoDB, l'analisi statistica viene realizzata attraverso la funzione db.collection.aggregate().

Concetto

La Pipeline di Aggregazione è un concetto astratto che tratta i dati come acqua che scorre attraverso un condotto. Possiamo elaborare i dati in più fasi all'interno della pipeline. Dopo che una fase elabora i dati, i risultati elaborati vengono passati alla fase successiva per ulteriore elaborazione.

Esempi di applicazione della pipeline di aggregazione nell'analisi statistica:

  • Nella prima fase, un insieme di dati del documento viene recuperato dalla collezione in base a determinate condizioni.
  • Nella seconda fase, i dati del documento recuperati vengono raggruppati e aggregati.
  • Nella terza fase, i dati aggregati dalla seconda fase vengono ordinati.

L'intero processo è simile a un'operazione di pipeline in cui i dati entrano da un'estremità della pipeline, subiscono l'elaborazione attraverso diverse fasi e quindi producono un risultato finale.

Operatori Supportati dalla Pipeline di MongoDB

Di seguito sono riportati gli operatori comuni supportati da MongoDB:

Operatore Descrizione
$match La fase $match è utilizzata per filtrare i dati del documento in base a condizioni, simile alla condizione where in SQL.
$group La fase $group è utilizzata per raggruppare e aggregare i dati del documento, simile alla clausola group by in SQL.
$sort Utilizzato per ordinare i dati.

Passaggi per Utilizzare la Pipeline di Aggregazione

Tipicamente, sono coinvolti tre passaggi:

  • Filtrare i dati di destinazione utilizzando $match.
  • Raggruppare e aggregare i dati utilizzando $group.
  • Ordinare i risultati utilizzando $sort (opzionale).

Esempio:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

SQL equivalente:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Nota: Per ulteriori informazioni sull'analisi statistica aggregata, si prega di fare riferimento ai capitoli successivi.