‫Istruttore: Usiamo ora un processo chiamato
‫popola per ottenere effettivamente l'accesso alle guide
‫turistiche di riferimento ogni volta che richiediamo un determinato tour.
‫Quindi, nell'ultimo video, abbiamo creato
‫un riferimento all'utente, qui in questo campo delle guide,
‫proprio nel nostro modello di tour, giusto?
‫E ora useremo popola per sostituire sostanzialmente
‫i campi a cui abbiamo fatto riferimento
‫con i dati correlati effettivi.
‫E il risultato sembrerà
‫che i dati siano sempre stati
‫incorporati, quando in realtà, come
‫sappiamo, sono in una raccolta completamente diversa, ok?
‫Ora, il processo di compilazione avviene sempre in una query.
‫E quindi andiamo ora al nostro controller
‫del tour, quindi direttamente alla funzione in cui otteniamo un singolo tour.
‫Quindi qui, in tour.
‫Ed ecco la nostra domanda, giusto?
‫Quindi qui è dove costruiamo la nostra query.
‫E ora tutto ciò che dobbiamo fare è
‫aggiungere il popolamento alla query.
‫Quindi compila, e poi il nome del campo
‫che vogliamo effettivamente popolare
‫e che si chiama guide, ok?
‫E se ci pensi, questo nome ha davvero senso.
‫Quindi vogliamo popolare quindi fondamentalmente per
‫riempire il campo chiamato guide nel nostro modello.
‫Giusto, quindi di nuovo, questo campo delle guide
‫contiene solo il riferimento.
‫e con popola lo riempiremo con
‫i dati effettivi, va bene e di nuovo solo nella
‫query e non nel database effettivo, ok?
‫Quindi, questo è davvero tutto ciò che dobbiamo fare.
‫E ora diamo un'occhiata al risultato, ok?
‫Quindi, questo è l'id del tour e ricordiamo che è così che
‫sembrano le guide, in questo momento, ok?
‫Ma se ora otteniamo tour e con
‫quell'id, allora aspettiamo
‫ora, e infatti, ecco i dati sulle guide.
‫Ok, quindi questi due elementi che avevamo già
‫nelle guide, ora sono stati popolati con i dati effettivi.
‫E se ora diamo un'occhiata a ottieni
‫tutti i tour, sbarazziamoci di alcune di queste cose qui.
‫Abbiamo troppe cose aperte qui.
‫Quindi se ora otteniamo tutti i tour,
‫ok, allora scorriamo fino alla fine
‫dove dovrebbe essere
‫quello nuovo e apparentemente ora va bene,
‫oh è perché ho questo filtro
‫qui, sbarazziamoci di quello, e ora ho il mio 10 risultati ed effettivamente è
‫proprio qui, quindi il nuovo tour di prova.
‫E ora vedi che qui è tornato
‫a mostrarci solo i valori che sono effettivamente nel database.
‫Quindi confermiamolo anche qui in Compass.
‫E così in effetti, come vedi, non
‫abbiamo ancora i dati effettivi qui nel database, ma solo gli ID.
‫Ok, ed è solo quel passaggio di compilazione che
‫sostituirà questi ID con i dati effettivi, ok?
‫E quindi proprio qui, ciò
‫non accade bene perché non abbiamo implementato
‫il popolamento nel gestore del percorso get all tours.
‫Ok, ora lascia che ti mostri un piccolo trucco che
‫possiamo fare con la funzione popola.
‫Che è in realtà anche solo selezionare determinati campi.
‫Quindi, per esempio, non siamo interessati a questa proprietà v qui e
‫nemmeno a passwordChangedAt right, quindi non è
‫il tipo di
‫dati che vogliamo sulle nostre guide turistiche.
‫E quindi qui in popola, possiamo effettivamente specificarlo.
‫Quindi, invece di passare semplicemente la
‫stringa, possiamo creare un oggetto di
‫opzioni e
‫quindi possiamo dire, il percorso è guide,
‫quindi in pratica, il nome del campo che vogliamo sostituire, e
‫quindi, come al
‫solito, possiamo usare select , e poi meno, questo
‫qui e anche l'altro, quindi passwordChangedAt, è solo più facile
‫da copiare, va bene, quindi cambiamolo qui
‫e invialo di nuovo.
‫E questo ovviamente non è il percorso giusto,
‫quindi mi dispiace per quello, penso di averlo usato anche prima
‫in realtà dove volevo mostrarti questo,
‫giusto, e mi dispiace per quello, ma comunque quello che
‫vogliamo liberarci di qui c'è questa V
‫e questa passwordChangedAt.
‫E quindi l'abbiamo
‫già fatto, quindi se lo inviamo
‫ora, ovviamente otteniamo solo i dati che ci interessano.
‫Va bene, quindi questa funzione di popolamento è
‫uno strumento assolutamente fondamentale per lavorare con
‫i dati in Mongoose.
‫E soprattutto, ovviamente, quando
‫ci sono relazioni tra i
‫dati, ok, quindi dovresti sempre sapere esattamente come e
‫quando utilizzarli per le tue applicazioni.
‫E per allenarci a questo, lo useremo
‫ovviamente molte volte di più in questa sezione.
‫Ora, solo una cosa che voglio che tu
‫tenga a mente, è che dietro le quinte, l'uso di
‫popolare creerà comunque una nuova
‫query e quindi questo potrebbe influire sulle tue prestazioni.
‫Ok, ovviamente se lo fai solo una o
‫due volte e in una specie di piccola applicazione, allora quel piccolo
‫successo sulle prestazioni non è affatto un grosso problema.
‫Ma in un'applicazione enorme, con tonnellate
‫di popolazione dappertutto, allora potrebbe
‫davvero avere qualche tipo di effetto, ok?
‫Quindi tienilo a mente.
‫Ok, e ha davvero senso, proprio perché in quale
‫altro modo Mongoose sarebbe in grado di ottenere dati
‫su tour e utenti allo stesso tempo.
‫Fondamentalmente è necessario creare una nuova query
‫per poter creare questa connessione.
‫Ok e ora solo per finire, ricordiamo
‫quello che ti ho
‫mostrato che in realtà non ha funzionato quando abbiamo fatto tutti i tour.
‫Quindi, ricorda come in questa situazione otteniamo semplicemente gli
‫ID delle guide turistiche e non i
‫dati utente di riferimento.
‫Ok, quindi una soluzione sarebbe fondamentalmente copiare questo
‫codice qui, quindi questa funzione di popolamento, anche qui in
‫questo gestore di route, ma ovviamente
‫il codice duplicato non è mai una buona idea.
‫E spero che
‫tu sappia già a questo punto un modo migliore per farlo.
‫E la risposta è un middleware di query.
‫Ok, quindi andiamo avanti e passiamo al nostro modello, e
‫sto copiando questo
‫codice qui ora e quindi, sì, facciamolo qui.
‫Quindi,
‫un pre e poi lo farò proprio come prima
‫con un'espressione regolare, che funzionerà per tutto
‫ciò che inizia con find.
‫Quindi, proprio
‫così, Ok, e ovviamente lo facciamo nel middleware di query, perché questo
‫è il tipo di middleware che
‫verrà eseguito ogni volta che c'è una query.
‫Bene, mettiamo insieme tutti questi middleware pre
‫e poi abbiamo quello post.
‫Va bene, quindi fammi copiare il codice che avevamo prima e
‫ora aggiungiamolo a questo, perché ricorda
‫che nel middleware delle
‫query, questo punta sempre alla query corrente.
‫E quindi ora praticamente tutte le query
‫popoleranno automaticamente il campo delle guide
‫con l'utente di riferimento.
‫Ok, quindi ora possiamo liberarcene qui.
‫E sì, è proprio così.
‫Quindi ora lo facciamo qui,
‫invece di farlo in due posti, nel controller.
‫E quindi questo è un simpatico trucchetto nel caso in cui
‫tu voglia sempre popolare tutti i tuoi documenti.
‫Quindi, proviamolo.
‫Primo, se funziona ancora qui.
‫E in effetti lo fa, quindi otteniamo i nostri due utenti.
‫E poi testiamolo qui dove prima non
‫funzionava e ora funziona, quindi ecco il risultato.
‫E ora, solo per assicurarci
‫che funzioni davvero, aggiorniamolo e fondamentalmente aggiungiamo un'altra guida turistica.
‫Quindi copiamo l'id del tour qui, quindi aggiorniamo tour, quindi dobbiamo
‫mettere l'id qui,
‫e poi nel corpo prendiamolo da create tour, quindi
‫questa guida,
‫e mettiamolo qui, e poi
‫dobbiamo anche ottenere il nostro altro utente.
‫Quindi, è questo qui, che in realtà non è una
‫guida o nemmeno un amministratore, ma questo è solo per il
‫test, quindi prendiamo questo ID
‫e poi andiamo avanti e lo mettiamo qui.
‫Quindi, aggiorniamolo, funziona ancora, e quindi ora in realtà,
‫anche in questo
‫output, abbiamo già i dati popolati.
‫Ok, perché nella nostra espressione regolare ricorda
‫che abbiamo usato find.
‫Quindi, questo aggiornamento qui viene implementato usando find by id e
‫update, e quindi inizia anche con find e
‫quindi anche il middleware di query che eravamo prima si
‫applica anche a questa funzione.
‫Ok, ecco come funziona il popolamento.
‫Ok, ancora una volta, strumento estremamente importante nella tua
‫cassetta degli attrezzi Mangusta, va bene.
‫E giusto per essere
‫sicuri, prendiamoci 15 secondi qui per ricapitolare.
‫Quindi questo è un processo in due fasi.
‫Innanzitutto, crei un riferimento a un altro modello.
‫E così, con questo, crei efficacemente
‫la relazione tra questi due set di dati.
‫Quindi, nel secondo passaggio, si compila
‫il campo appena specificato in
‫precedenza, quindi le guide utilizzano il metodo popola.
‫Va bene, molto semplice, molto diretto, tutto ciò di cui
‫hai bisogno è capire veramente
‫la logica dietro tutto questo e
‫poi sei pronto per iniziare a usarlo davvero.