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.