‫Narratore: Bentornato.
‫In questo video e
‫nel prossimo voglio presentarti la
‫pipeline di aggregazione MongoDB che è un framework MongoDB
‫estremamente potente ed estremamente utile per l'aggregazione
‫dei dati.
‫E l'idea è
‫che fondamentalmente definiamo una pipeline attraverso la
‫quale passano tutti i documenti
‫di una certa raccolta, dove
‫vengono elaborati passo dopo passo per trasformarli in risultati aggregati.
‫Ad esempio, possiamo usare la pipeline di aggregazione
‫per calcolare le medie o calcolare i
‫valori minimi e massimi o possiamo calcolare anche
‫le distanze, e possiamo davvero fare
‫tutti i tipi di cose.
‫È davvero sorprendente quanto sia potente
‫questa pipeline di aggregazione.
‫Va bene, ma basta parlare.
‫Ora iniziamo effettivamente a utilizzare la pipeline di aggregazione
‫e creerò una nuova funzione di intestazione qui perché
‫in seguito definiremo un nuovo percorso e quindi
‫utilizzeremo quella funzione per questo.
‫Ma quel nuovo percorso, lo creerò più tardi.
‫Quindi voglio creare una funzione
‫qui che calcoli un paio di statistiche sui nostri tour.
‫Quindi chiamerò questo getTourStats.
‫Ok, quindi Statistiche per le statistiche,
‫e sarà una
‫funzione asincrona e quindi un codice vs ora viene automaticamente precompilato.
‫Va bene, creiamo o proviamo il blocco catch qui.
‫In realtà, lo copierò da qui in
‫alto, e ora qui creerò una
‫variabile chiamata stats.
‫Ora la pipeline di aggregazione è davvero una funzionalità di MongoDB.
‫Ma Mongoose, ovviamente, ci dà accesso ad
‫esso, in modo che possiamo usarlo nel driver Mongoose, giusto?
‫Quindi, usando il nostro modello di
‫tour per accedere alla raccolta di tour,
‫diciamo tour. aggregato.
‫E così la pipeline di aggregazione è
‫un po' come una normale query e quindi usare la
‫pipeline di aggregazione è un po' come fare una normale query.
‫La differenza qui è che nelle aggregazioni, come
‫ho già detto, possiamo manipolare i dati in
‫un paio di passaggi diversi
‫e quindi ora definiamo effettivamente questi passaggi.
‫E per questo, passiamo in una serie di cosiddetti stadi.
‫Quindi passiamo in un array, e poi
‫qui avremo molte fasi.
‫E di nuovo i documenti passano attraverso queste fasi
‫uno per uno, passo dopo passo nella sequenza di definizione
‫come la definiamo qui.
‫Quindi ciascuno degli elementi in questa
‫matrice sarà una delle fasi.
‫E ci sono un sacco di fasi
‫diverse tra cui possiamo scegliere, ma ti dirò
‫solo le più comuni in questa
‫lezione e anche nella prossima.
‫Ma comunque, ora voglio prendere un
‫minuto e dare una rapida occhiata alla documentazione MongoDB
‫perché penso che non l'abbiamo ancora fatto.
‫Quindi MongoDB e conosciamo già questo sito.
‫Quindi sul nostro sito Web MongoDB andiamo qui
‫per imparare, quindi documentazione e poi
‫qui selezioniamo il manuale MongoDB e questa documentazione è enorme.
‫Ha davvero un sacco di cose
‫qui e se dovessi affrontarle
‫tutte, beh, allora diventeresti davvero un maestro di MongoDB.
‫Quindi ti dà una bella introduzione a MongoDB,
‫hai l'installazione qui.
‫Hai le operazioni CRUD, quindi una bella panoramica
‫su molte delle
‫cose che abbiamo già imparato prima, giusto?
‫Poi hai cose sull'aggregazione e in
‫particolare, la pipeline di aggregazione di cui
‫parleremo ora, ma quello
‫che voglio mostrarti qui è in
‫realtà questo riferimento che abbiamo in fondo perché nel
‫riferimento abbiamo qui per esempio gli operatori
‫ed è lì che abbiamo
‫un sacco di cose importanti che usiamo tutto il tempo.
‫Quindi diamo un'occhiata qui agli
‫operatori di query, ad esempio e qui vedete, in realtà abbiamo
‫questi operatori che abbiamo già usato.
‫Quindi, ad esempio, maggiore o uguale a, o
‫minore e uguale, ma se un
‫giorno nelle tue applicazioni hai bisogno di
‫qualche altro operatore, beh, ora sai dove puoi trovarli.
‫Ora, ovviamente, è anche sempre molto
‫utile fare una rapida ricerca su Google,
‫probabilmente trovare qualche post di overflow dello stack
‫a riguardo, ma credetemi, molte
‫volte è più facile e veloce saltare rapidamente alla documentazione e
‫cercare rapidamente qualunque cosa tu ' ho bisogno.
‫Hai solo bisogno di sapere come funziona
‫la documentazione e una volta che lo sai, sarà
‫abbastanza facile per te trovare quello che stai cercando, va bene?
‫Qui hai anche alcuni operatori
‫logici, ad esempio, l'operatore OR che abbiamo già usato.
‫Di nuovo, davvero un sacco di cose, operatori geospaziali e ne useremo alcuni
‫in realtà, più tardi, e sì,
‫davvero un sacco di cose.
‫Quindi quello che volevo mostrarti dopo questa conferenza in realtà,
‫sono le fasi della pipeline di aggregazione.
‫Quindi qui ne hai molti
‫e quello che useremo in questa lezione
‫qui è match, per esempio e gruppo,
‫dov'è quello?
‫Sì, gruppo, è molto importante, e quindi, come
‫ho detto, ti mostrerò
‫i più importanti in questa lezione e nella prossima.
‫Ma ancora una volta, se in qualche caso hai bisogno
‫di qualcos'altro, allora vai avanti, vieni qui in questa
‫documentazione e troverai quello che stai cercando.
‫Va bene?
‫Ad ogni modo, ora impariamo come possiamo effettivamente definire
‫una di queste fasi, va bene?
‫E inizierò con la partita.
‫E la corrispondenza è
‫fondamentalmente selezionare o filtrare determinati documenti.
‫E quindi è molto semplice.
‫È proprio come un oggetto filtro in MongoDB, come
‫quello che abbiamo usato tante volte.
‫Quindi ognuno degli stadi è un oggetto
‫e poi ecco che arriva il nome dello stadio.
‫Quindi questa è la fase della partita, ok?
‫E come ho detto, è davvero solo una query.
‫E quindi diciamo che per cominciare, vogliamo solo selezionare
‫documenti che hanno una media
‫di voti maggiore o uguale a 4. 5.
‫Quindi puoi farlo?
‫Ti do solo un secondo per farlo qui.
‫Quindi spero che tu l'abbia fatto.
‫Quindi la media delle valutazioni dovrebbe essere maggiore o
‫uguale a 4. 5.
‫E così è, questa è la prima fase.
‫E di solito questa fase della partita è solo una fase
‫preliminare per poi prepararsi alle fasi successive che verranno.
‫Quindi la prossima è ora la fase a gironi.
‫Quindi raggruppa e poi
‫lì dentro dobbiamo sempre passare solo un altro oggetto.
‫Quindi sembra un po 'strano con tutti questi oggetti,
‫ma, sì, l'hai visto prima e MongoDB
‫funziona proprio in questo modo.
‫Sono sempre oggetti, dentro gli oggetti, dentro gli oggetti.
‫E questo gruppo qui è dove avviene la vera
‫magia perché come dice
‫il nome, ci permette di raggruppare
‫i documenti, fondamentalmente usando accumulatori.
‫E un accumulatore,
‫ad esempio, calcola anche una media.
‫Quindi, se abbiamo cinque tour, ognuno dei quali ha
‫una valutazione, possiamo quindi calcolare la valutazione media utilizzando il gruppo.
‫E quindi facciamo esattamente questo qui.
‫Ora la prima cosa, è che
‫dobbiamo sempre specificare l'id perché è qui che specificheremo
‫per cosa vogliamo raggruppare.
‫Per ora diciamo null qui perché vogliamo avere
‫tutto in un gruppo in modo da poter calcolare
‫le statistiche per tutti i tour insieme
‫e non separarli per gruppi.
‫Poi, un po' più avanti, raggrupperemo anche per cose diverse, ad
‫esempio possiamo raggruppare per difficoltà e quindi possiamo,
‫ad esempio, calcolare la media per i tour
‫facili, la media per i tour medi e
‫la media per i tour difficili.
‫Quindi, di nuovo, possiamo raggruppare per uno dei nostri campi
‫e per quel campo, lo specificheremo qui, ma per
‫ora, come ho detto, vogliamo calcolare queste medie per tutti
‫i tour insieme in un grande gruppo.
‫Quindi in tal caso diciamo _id e lo impostiamo su null.
‫Ora calcoliamo effettivamente la valutazione media.
‫Per farlo, specifichiamo semplicemente un nuovo
‫campo, quindi chiamiamolo semplicemente la valutazione media, quindi
‫così, e questo sarà bene,
‫la media,
‫che è ancora un altro operatore MongoDB, quindi questo qui.
‫Lo troverai nel riferimento se lo cerchi.
‫Quindi questo è un operatore matematico che
‫calcola la media e ora il nome del campo.
‫E ancora, so che sembrerà molto strano, ma
‫per specificare il campo da cui vogliamo calcolare
‫la media, dobbiamo usare il simbolo del
‫dollaro, ma tra virgolette qui e poi
‫il nome del campo.
‫Quindi le valutazioni sono nella media in questo caso.
‫E calcoliamo anche il prezzo medio.
‫Quindi il prezzo medio, e ancora, ha sbagliato qui, e quindi
‫la media
‫e poi di nuovo, il nome
‫del campo e tra virgolette e con
‫questo simbolo del dollaro.
‫Giusto, quindi sembra di nuovo strano, ma
‫questo è solo
‫il modo in cui funziona la pipeline di aggregazione.
‫Quindi abbiamo il prezzo medio.
‫In realtà calcoliamo anche il prezzo
‫minimo, quindi il prezzo minimo, e il prezzo massimo.
‫Quindi minPrice
‫e d'ora in poi sembrerà tutto simile, quindi ora
‫usiamo l'operatore min e
‫poi di nuovo il nome del campo in questo modo.
‫E una virgola qui e ora duplichiamo
‫questo per calcolare il prezzo massimo.
‫E ora, diamo un'occhiata a ciò che abbiamo
‫già ottenuto a questo punto.
‫Quindi ora dobbiamo effettivamente inviare questa risposta, e
‫quindi di nuovo,
‫vado a prendere alcune di queste risposte già fatte qui.
‫Quindi i dati che vogliamo inviare sono chiamati stats.
‫E ora tutto ciò che dobbiamo fare è effettivamente aggiungere
‫una nuova rotta qui nelle nostre rotte del tour e
‫di nuovo, modificherò qui, proprio in alto.
‫Quindi router. route
‫/gettour, o in realtà solo tour-stats, proprio così perché
‫il get è già definito nel metodo HTTP.
‫Quindi non c'è bisogno di ripeterlo nel nome.
‫Quindi tourController. getTourStats.
‫Mettilo al sicuro e ora proviamolo.
‫Quindi sono davvero eccitato nel testarlo ora, in realtà per
‫vedere se funziona perché è davvero uno strumento straordinario e davvero potente
‫che ti permette
‫di fare così tante cose.
‫Quindi tour-stats, invialo e
‫non è proprio il risultato che
‫stavamo aspettando, quindi è solo la pipeline che abbiamo
‫definito, ma so già perché è così.
‫Quindi non abbiamo aspettato il risultato.
‫Quindi questo, in pratica, proprio
‫come una normale query restituirà un oggetto aggregato.
‫Così . find restituirà una query e . aggregate
‫restituirà un oggetto aggregato.
‫E poi solo quando
‫lo aspettiamo, torna effettivamente con il risultato.
‫Questo è anche il motivo per cui abbiamo definito questa funzione qui
‫come una funzione asincrona, in modo che possiamo usare wait lì
‫dentro e quindi questo è il posto giusto.
‫Proviamo di nuovo.
‫Ed eccoci!
‫Così fantastico!
‫Abbiamo la valutazione media di tutti i nostri tour,
‫abbiamo il prezzo medio
‫che vedi è 1563 e quindi il minimo e il massimo, giusto?
‫E dai nostri dati, possiamo effettivamente
‫confermare che questo è vero.
‫Così fantastico!
‫Davvero, davvero fantastico.
‫Ora, un'altra cosa che voglio
‫fare qui è calcolare effettivamente il numero
‫totale di valutazioni che abbiamo e anche il numero totale di tour.
‫Quindi abbiamo
‫la valutazione media qui
‫e facciamolo prima, quindi numRatings, come questo
‫e probabilmente puoi indovinare che
‫questo si chiama sum e poi le valutazioniMedia,
‫o in realtà non valutazioniMedia, ma valutazioniQuantità, giusto?
‫Quindi è lì che viene memorizzato il numero di
‫valutazioni e quindi il numero di valutazioni, il totale,
‫sarà la somma di tutti questi insieme.
‫E ora, l'ultimo, è il numero di
‫tour e quello è un
‫po' più complicato, quindi è carino da mostrarvi qui.
‫Quindi vogliamo ancora sommare, quindi sommare tutto insieme,
‫in pratica, quindi usiamo ancora la somma,
‫ma cosa aggiungeremo insieme?
‫Bene, in pratica ne aggiungiamo uno per ogni
‫documento, quindi diciamo 1, e basta.
‫Quindi fondamentalmente per ogni documento
‫che passerà attraverso questa pipeline, ne
‫verrà aggiunto uno a questo contatore numerico.
‫Chiamiamolo numTours.
‫E quindi, sì, proviamolo ora, di nuovo.
‫E infatti otteniamo i nostri nove tour e sappiamo
‫già che ne abbiamo nove.
‫Quindi queste sono tutte le statistiche per tutti i tour insieme, ma
‫ora passiamo al livello successivo.
‫Come ho detto prima, ora possiamo raggruppare i nostri risultati
‫per diversi campi.
‫E cominciamo con la difficoltà.
‫E quindi è abbastanza simile a specificare i campi laggiù che
‫è semplicemente il simbolo del dollaro, e
‫poi il nome del campo.
‫Quindi $difficoltà, dagli una cassaforte e basta.
‫Invialo qui e ora abbiamo tutte le
‫statistiche definite per ciascuna di queste tre difficoltà.
‫Quindi è davvero, davvero sorprendente.
‫Quindi questa è la parte che mi fa impazzire.
‫È assolutamente fantastico.
‫Voglio dire, puoi iniziare a vedere tutti i
‫tipi di cose, tutti i tipi
‫di manipolazione dei dati che puoi fare usando questa pipeline, giusto?
‫Quindi ora possiamo davvero iniziare ad analizzare le
‫cose, ad esempio, vediamo che i tour più facili
‫sono quelli che ottengono le valutazioni peggiori
‫con un 4. 6, mentre i tour
‫medi sono quelli che ottengono i punteggi più alti.
‫Si vede anche che i
‫tour difficili sono quelli più costosi con
‫un prezzo medio di 1997, mentre quelli più facili sono anche quelli
‫più economici con un prezzo di 1272, giusto?
‫Vediamo anche che i
‫tour più facili sono quelli che
‫abbiamo di più, quindi quattro facili e solo due difficili, giusto?
‫Quindi possiamo usarlo, ovviamente, per
‫ottenere tutti i tipi di informazioni sui nostri dati.
‫Commentiamo questo
‫qui e proviamone un altro, ad
‫esempio, per valutazioni, perché no,
‫proviamo e vediamo cosa otteniamo.
‫Quindi, ad esempio, abbiamo due tour, quindi fondamentalmente con
‫un punteggio di 4. 5, abbiamo
‫due tour con 4. 7, un giro con 4. 8, e
‫tre tour con 4. 9.
‫Oh, e anche quaggiù, un tour con 4. 6, quindi,
‫ad esempio, un'intuizione che possiamo ottenere
‫qui è che i tour molto costosi con
‫questo prezzo medio del 1997 ottengono valutazioni estremamente buone.
‫Quindi tutti i tipi di cose, davvero che possiamo fare qui.
‫Eliminiamo questo, aggiungiamo questo di nuovo, e ora
‫possiamo persino
‫fare alcune operazioni con questo.
‫Quindi, solo per divertimento, mettiamo questa difficoltà in maiuscolo.
‫Quindi questo, ovviamente, sarà un altro oggetto qui e poi
‫qui di fronte c'è l'operatore.
‫Quindi l'operatore in questo caso si chiama $toUpper.
‫Quindi solo, ancora un altro operatore MongoDB.
‫Quindi dai un'occhiata, e ora è scritto in maiuscolo.
‫Grande!
‫Quindi abbiamo la fase a gironi qui che è abbastanza completa.
‫Quindi proviamo un altro che è una sorta di fase.
‫Quindi un altro oggetto nel nostro array per un altro stadio
‫e questo si chiama sort.
‫Quindi ordina e poi lì dentro, abbiamo bisogno di un altro
‫oggetto, e questo tipo di completamento automatico, non so
‫perché, e quindi qui ora possiamo
‫specificare in quale campo vogliamo ordinare questo e usiamo effettivamente il prezzo medio.
‫E ora qui nell'ordinamento abbiamo effettivamente bisogno di usare i
‫nomi dei campi che abbiamo specificato qui nel gruppo.
‫Non possiamo più usare i vecchi nomi perché a questo
‫punto sono già spariti.
‫Non esistono più.
‫Quindi, a questo punto, nella
‫pipeline di aggregazione, abbiamo già questi risultati.
‫Quindi questi sono sostanzialmente i nostri documenti.
‫Quindi, se vuoi ordinare in base al prezzo medio, questo
‫è il nome del campo che dobbiamo usare.
‫Quindi possiamo dire il prezzo medio
‫e quindi possiamo dire 1 per l'aumento.
‫Quindi proviamolo.
‫E sì, infatti.
‫Questo è il più basso e quello è il più alto.
‫Grande!
‫Quindi abbiamo fatto un sacco di cose.
‫Lascia che ti mostri che possiamo anche ripetere le fasi.
‫Quindi facciamo un'altra corrispondenza qui
‫e questa è davvero
‫solo per mostrarti che possiamo effettivamente
‫ripetere le fasi e voglio anche mostrarti un altro operatore.
‫Quindi ora selezioniamo per id e ricordiamo che l'id è
‫ora la difficoltà, giusto?
‫Quindi l'abbiamo appena specificato qui.
‫Quindi vogliamo l'id e ora un nuovo operatore che
‫non abbiamo ancora usato.
‫Vogliamo che non sia uguale a, e diciamo facile.
‫E così, proprio così,
‫selezioneremo tutti i documenti che non sono facili.
‫Quindi in questo caso,
‫quello che dice medio e difficile, giusto?
‫Quindi sostanzialmente, escludendo quello che dice facile, giusto?
‫Quindi, ancora una volta,
‫non è molto utile qui perché ciò toglierà molti dei nostri dati
‫significativi, ma solo per mostrarti che
‫possiamo ovviamente abbinare più volte.
‫Quindi, in questo caso, abbiamo abbinato una volta prima di
‫creare effettivamente il gruppo e poi abbiamo abbinato una volta che eravamo
‫pronti, facendo il raggruppamento.
‫Ora, in realtà teniamolo qui, fuori
‫dalla nostra pipeline di aggregazione,
‫ma lo lascerò qui, solo così
‫lo tieni come riferimento.
‫Fai un altro salvataggio, fai un altro tentativo e quindi
‫questi sono i nostri risultati per
‫ottenere le statistiche del tour.
‫Quindi, davvero bello, davvero fantastico.
‫Spero che questo video ti
‫sia piaciuto e nel prossimo continueremo
‫a utilizzare la pipeline di aggregazione per fare altri calcoli.
‫E per mostrarti alcune fasi più diverse.
‫Quindi tieniti sintonizzato per quello.