Aggregazione in MongoDB: analizzare e filtrare i database
La funzione di aggregazione in MongoDB è uno strumento prezioso che consente di analizzare e filtrare i database. Il sistema di pipeline facilita la specificazione delle richieste e quindi anche degli output in modo molto individuale.
Che cos’è l’aggregazione in MongoDB?
MongoDB è un database orientato ai documenti non relazionale, progettato per essereutilizzato con grandi quantità di dati diversi. Grazie alla rinuncia a tabelle rigide e a tecniche come lo sharding, in cui i dati sono archiviati su nodi diversi, la soluzione NoSQL può essere scalata orizzontalmente rimanendo molto flessibile e sicura contro eventuali guasti.
I documenti nel formato binario JSON BSON sono raggruppati in cosiddette raccolte e possono essere interrogati e modificati utilizzando MongoDB Query Language. Benché questo linguaggio offra molte opzioni, non è adatto all’analisi dei dati. A tale scopo, MongoDB offre l’aggregazione.
In informatica questo termine viene utilizzato per descrivere vari processi. In riferimento a MongoDB, per aggregazione si intende la determinazione di informazioni sintetizzate. Pertanto, i dati provenienti da uno o più documenti vengono analizzati e filtrati in base ad alcuni fattori definiti. Al termine di questo processo si ottiene un risultato unico e chiaro. In questo articolo non solo spiegheremo le possibilità che l’aggregazione offre su MongoDB per un’analisi completa dei dati, ma mostreremo anche esempi di come utilizzare il metodo aggregate ( )
per il sistema di gestione dei database.
Aggregazione in MongoDB: preparazione e prerequisiti
Per utilizzare l’aggregazione in MongoDB, è necessario soddisfare solo alcuni requisiti. La procedura viene eseguita nella shell e funziona secondo regole logiche che si possono applicare alle proprie esigenze individuali. MongoDB deve essere già installato sul computer. Per sapere come scaricare, installare ed eseguire il database per la prima volta, consulta il nostro tutorial completo di MongoDB. Occorre inoltre utilizzare un firewall potente e aver già configurato il database in base a tutti gli standard di sicurezza attuali. Per eseguire l’aggregazione su MongoDB, devi assicurarti di disporre dei privilegi di amministrazione. Il database funziona su tutte le piattaforme, quindi i passaggi descritti di seguito sono validi per tutti i sistemi operativi.
Il ruolo della pipeline per l’aggregazione in MongoDB
In MongoDB è possibile anche effettuare semplici ricerche o interrogazioni. Il database fornirà immediatamente i risultati desiderati. Si tratta tuttavia di un metodo molto limitato, in quanto può presentare solo i risultati già presenti nei documenti archiviati. Questo tipo di query non è destinato ad analisi più approfondite, modelli ricorrenti o ulteriori informazioni. Talvolta, però, è necessario prendere in considerazione diverse fonti all’interno di un database per trarre conclusioni significative. Per queste esigenze si utilizza l’aggregazione in MongoDB. Per ottenere un risultato, il metodo si avvale delle cosiddette pipeline.
Qual è la funzione della pipeline?
Le pipeline di aggregazione in MongoDB sono processi in cui i dati esistenti vengono analizzati e filtrati con l’aiuto di vari passaggi intermedi, con lo scopo di visualizzare il risultato cercato dall’utente. Tali passaggi intermedi sono noti come stadi. In base ai requisiti, è possibile avviare uno o più stadi. Gli stadi vengono eseguiti uno dopo l’altro e modificano l’input originale in modo che alla fine venga visualizzato l’output desiderato. Mentre l’input è composto da numerosi dati, l’output, cioè il risultato finale, è unico. Tra poco spiegheremo i diversi stadi offerti dalla funzione di aggregazione in MongoDB.
Come si presenta la sintassi della pipeline di aggregazione in MongoDB?
Per prima cosa, vale la pena di dare una breve occhiata alla sintassi di base del metodo di aggregazione in MongoDB. La struttura del metodo è sempre la stessa e può essere personalizzata in base alle esigenze specifiche. In pratica, la struttura di base è la seguente:
db.collection_name.aggregate ( pipeline, options )
shellQui, collection_name
è il nome della raccolta considerata. Le fasi richieste o desiderate di un’aggregazione MongoDB sono elencate sotto pipeline
, mentre options
può essere usato per indicare ulteriori parametri opzionali che specificano l’output richiesto.
Quali stadi ci sono?
La pipeline di aggregazione in MongoDB prevede numerosi stadi. La maggior parte di essi può essere utilizzata più volte all’interno di una pipeline. Elencarli tutti andrebbe oltre lo scopo di questo articolo, soprattutto perché alcuni servono solo per operazioni molto specifiche. A titolo indicativo, tuttavia, elencheremo qui alcuni degli stadi più frequentemente utilizzati:
-
$count
: indica quanti documenti BSON sono stati presi in considerazione per lo stadio o gli stadi di questa pipeline. -
$group
: ordina e raggruppa i documenti in base a determinati parametri. -
$limit
: serve a ridurre i documenti visualizzati. -
$match
: limita i documenti che vengono utilizzati per lo stadio successivo. -
$out
: include i risultati dell’aggregazione MongoDB nella raccolta. Questo stadio può essere usato solo alla fine di una pipeline. -
$project
: seleziona determinati campi di una raccolta. -
$skip
: ignora un certo numero di documenti. Va specificato per mezzo di un’opzione. -
$sort
: ordina i documenti secondo un metodo a scelta. Tuttavia, i documenti non vengono modificati oltre. -
$unset
: esclude alcuni campi, pertanto svolge la funzione opposta di $project.
Aggregazione in MongoDB: alcuni esempi pratici
Per spiegare come funziona concretamente l’aggregazione in MongoDB, mostreremo ora alcuni esempi di diversi stadi e come utilizzarli. Per usare l’aggregazione, apri la shell come amministratore. In genere, per prima cosa viene visualizzato un database di prova. Qualora tu intenda utilizzare un database diverso, puoi ricorrere al comando use
.
A titolo di esempio, ipotizziamo un database che contenga i dati della clientela che ha acquistato un determinato prodotto. Per chiarezza, questo database contiene solo dieci documenti strutturati secondo lo stesso schema. L’esempio è il seguente:
{
"name" : "Greco",
"city" : "Bologna",
"country" : "Italy",
"quantity" : 14
}
shellLe informazioni note per ogni acquirente sono quindi il nome, il luogo di residenza, il paese e il numero di prodotti acquistati.
Per sperimentare l’aggregazione in MongoDB, applica il metodo insertMany ( )
per aggiungere tutti i documenti con i dati della clientela all’insieme “clienti”:
db.clienti.insertMany ( [
{ "name" : "Greco", "city" : "Bologna", "country" : "Italy", "quantity" : 14 },
{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milan", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shellEseguendo questi dati, verrà visualizzato un elenco di ID oggetto per ogni singolo documento.
Come usare $match
Per illustrare le possibilità offerte dall’aggregazione in MongoDB, per prima cosa applichiamo lo stadio $match alla nostra raccolta “clienti”. In assenza di ulteriori parametri, il metodo mostrerebbe semplicemente l’elenco completo dei dati della clientela elencati in precedenza. Nell’esempio seguente, invece, istruiamo il metodo affinché ci mostri soltanto la clientela italiana. Il comando corretto è il seguente:
db.clienti.aggregate ( [
{ $match : { "country" : "Italy" } }
] )
shellL’output mostrerà soltanto gli ID degli oggetti e i dati della clientela italiana.
$sort per una migliore visione d’insieme
Per ordinare il database dei clienti, si può ricorrere all’aggregazione in MongoDB con lo stadio $sort. Nel seguente esempio, istruiamo il sistema a ordinare tutti i dati relativi alla clientela in base al numero di unità acquistate, partendo dal numero più alto. Per il nostro esempio, l’input corretto è il seguente:
db.clienti.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )
shellLimitare l’output con $project
Con gli stadi utilizzati finora, si noterà che l’output è relativamente ampio. Accanto alle informazioni effettive contenute nei documenti, viene ad esempio sempre emesso anche l’ID dell’oggetto. Nella pipeline di aggregazione in MongoDB si può usare $project per determinare quali informazioni devono essere emesse. A tal fine, si imposta il valore 1 per i campi obbligatori e 0 per quelli superflui. Nel nostro esempio, vorremmo vedere solo il nome e il numero di prodotti acquistati. Per farlo inseriamo questo valore:
db.clienti.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shellCombinare più stadi per l’aggregazione MongoDB
L’aggregazione in MongoDB offre sempre la possibilità di applicare più stadi in successione. Questi vengono eseguiti uno dopo l’altro e alla fine il risultato è un output che tiene conto di tutti i parametri desiderati. Per esempio, per visualizzare solo i nomi e gli acquisti effettuati dalla clientela italiana in ordine decrescente, si possono utilizzare le fasi descritte in precedenza come segue:
db.clienti.aggregate ( [
{ $match : { "country" : "Italy" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )
shellVuoi saperne di più su MongoDB? Nella nostra Digital Guide trovi tutto ciò di cui hai bisogno. Ad esempio, ti spieghiamo come funziona il comando List Databases e come utilizzare Sort in MongoDB per specificare l’ordine dei dati in uscita.