Pubblicità

Le operazioni di aggregazione elaborano record di dati e restituiscono risultati calcolati. Le operazioni di aggregazione raggruppano i valori di più documenti e possono eseguire una varietà di operazioni sui dati raggruppati per restituire un singolo risultato. In SQL count(*) e con group by è un equivalente dell’aggregazione MongoDB.

Il metodo aggregate()

Per l’aggregazione in MongoDB, si dovrebbe usare il metodo aggregate().

Sintassi

La sintassi di base del metodo aggregate() è la seguente –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Esempio

Nella collezione hai i seguenti dati –

{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: , likes: 750},

Ora dalla collezione sopra, se vuoi visualizzare una lista che indichi quanti tutorial sono stati scritti da ogni utente, allora userai il seguente metodo aggregate() –

> db.mycol.aggregate(){ "_id" : "tutorials point", "num_tutorial" : 2 }{ "_id" : "Neo4j", "num_tutorial" : 1 }>

La query equivalente a Sql per il caso d’uso sopra sarà select by_user, count(*) from mycol group by by_user.

Nell’esempio di cui sopra, abbiamo raggruppato i documenti per campo by_user e ad ogni occorrenza di by_user viene incrementato il valore precedente della somma. Segue una lista delle espressioni di aggregazione disponibili.

Espressione Descrizione Esempio
$sum Somma il valore definito da tutti i documenti della collezione. db.mycol.aggregate()
$avg Calcola la media di tutti i valori dati da tutti i documenti dell’insieme. db.mycol.aggregate()
$min Riceve il minimo dei valori corrispondenti da tutti i documenti dell’insieme. db.mycol.aggregate()
$max Riceve il massimo dei valori corrispondenti da tutti i documenti dell’insieme. db.mycol.aggregate()
$push Inserisce il valore in un array nel documento risultante. db.mycol.aggregate()
$addToSet Inserisce il valore in un array nel documento risultante, ma non crea duplicati. db.mycol.aggregate()
$first Prende il primo documento dai documenti di origine secondo il raggruppamento. Tipicamente questo ha senso solo insieme a qualche “$sort”-stage applicato in precedenza. db.mycol.aggregate()
$last Riceve l’ultimo documento dai documenti sorgente secondo il raggruppamento. Tipicamente questo ha senso solo insieme a qualche “$sort”-stage applicato in precedenza. db.mycol.aggregate()

Concezione di pipeline

Nel comando UNIX, pipeline di shell significa la possibilità di eseguire un’operazione su qualche input e usare l’output come input per il comando successivo e così via. Anche MongoDB supporta lo stesso concetto nel framework di aggregazione. C’è un insieme di possibili fasi e ognuna di queste viene presa come un insieme di documenti come input e produce un insieme di documenti risultante (o il documento JSON finale risultante alla fine della pipeline). Questo può poi a sua volta essere usato per la fase successiva e così via.

Seguono le possibili fasi nel framework di aggregazione –

  • $project – Usato per selezionare alcuni campi specifici da una collezione.

  • $match – Questa è un’operazione di filtraggio e quindi può ridurre la quantità di documenti che sono dati come input allo stadio successivo.

  • $group – Questo fa l’aggregazione effettiva come discusso sopra.

  • $sort – Ordina i documenti.

  • $skip – Con questo, è possibile saltare in avanti nella lista dei documenti per una data quantità di documenti.

  • $limit – Questo limita la quantità di documenti da guardare, per il numero dato a partire dalle posizioni correnti.

  • $unwind – Questo è usato per svolgere i documenti che stanno usando gli array. Quando si usa un array, i dati sono come pre-uniti e questa operazione sarà annullata con questo per avere di nuovo documenti individuali. Così con questa fase aumenteremo la quantità di documenti per la fase successiva.

Pubblicità

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.