‫-: Bentornato al prossimo video.
‫E continuiamo ora con una
‫nuova e piuttosto avanzata funzionalità di Mangusta
‫chiamata "Popolazione virtuale". ' Quindi,
‫a questo punto, abbiamo
‫popolato le recensioni
‫con il tour e i dati dell'utente proprio qui, giusto?
‫E così, proprio
‫ora, quando richiediamo recensioni, otteniamo l'accesso a tali informazioni.
‫Tuttavia, questo lascia ancora un problema irrisolto.
‫Quindi, come accederemo alle recensioni sui tour?
‫Quindi sostanzialmente, il contrario.
‫Quindi, diciamo che ho chiesto un tour specifico.
‫E poi, come avrò
‫accesso a tutte le recensioni per quel tour?
‫E questo problema sorge qui perché
‫abbiamo fatto riferimento ai genitori sulle recensioni.
‫Quindi, in pratica, avere le recensioni che puntano
‫ai tour e non i tour che puntano alle recensioni.
‫E così, come abbiamo detto all'inizio della sezione,
‫in questo caso,
‫il genitore non sa veramente dei suoi figli.
‫E così, in
‫questo esempio, il tour non conosce le sue recensioni.
‫E a volte, va bene.
‫Ma in questo caso, in realtà
‫vogliamo che il tour conosca praticamente tutte le recensioni che ha.
‫Ora, per risolvere questo problema,
‫con quello che sappiamo
‫a questo punto, potremmo avere due soluzioni.
‫E il primo sarebbe quello di
‫interrogare manualmente le recensioni ogni volta che interroghiamo i tour.
‫Ma sarebbe un
‫po' macchinoso farlo manualmente in questo modo.
‫E la seconda soluzione potrebbe essere quella di fare
‫riferimento anche ai bambini durante i tour.
‫Quindi, in pratica, mantieni una matrice di
‫tutti gli ID di revisione su ciascun documento del tour.
‫Quindi, tutto ciò
‫che dovremmo fare è popolare quell'array, giusto?
‫Ma in realtà abbiamo già escluso
‫di farlo all'inizio
‫perché non vogliamo memorizzare quella serie
‫di ID di revisione che
‫potrebbero poi crescere indefinitamente nel nostro database, giusto?
‫Ed è proprio questo il motivo per cui abbiamo
‫scelto le referenze dei genitori in primo luogo.
‫Tuttavia, c'è un'ottima soluzione per questo.
‫E questo perché Mongoose in realtà ci offre una
‫soluzione molto interessante per questo problema
‫con una funzionalità piuttosto avanzata chiamata "Popolazione virtuale". Quindi, con "Virtual Populate",
‫possiamo effettivamente
‫popolare il tour con recensioni.
‫Quindi, in altre
‫parole, possiamo accedere a tutte le recensioni per
‫un determinato tour, ma senza mantenere questa serie di ID sul tour.
‫Quindi, pensa a "Virtual
‫Populate" come un modo per mantenere quella serie di ID
‫di revisione in un tour, ma senza in realtà mantenerla nel database.
‫E quindi questo risolve il problema
‫che abbiamo con la referenziazione dei bambini, giusto?
‫Quindi, è un po' come i campi virtuali, ma con popola, ok?
‫Quindi, solo per
‫illustrarlo, andiamo al nostro modello di tour qui.
‫E quindi, quello che ho appena
‫descritto sarebbe, in teoria, fare qualcosa del genere.
‫Quindi, nel nostro modello di
‫tour, aggiungeremmo un campo chiamato "Recensioni". ' (tasti
‫che fanno clic) E quindi imposta
‫il tipo su Mongoose. Schema. ID oggetto.
‫(tasti che fanno clic) E non
‫è necessario scrivere questo.
‫Lo faccio solo per mostrartelo.
‫(tasti che fanno clic) E
‫quindi collegarlo con 'Revisiona. ' E,
‫naturalmente, questo qui dovrebbe essere un oggetto.
‫Ma ciò che conta qui è che questo è
‫fondamentalmente il modo in cui implementeremmo il riferimento ai bambini.
‫Quindi il tour fa riferimento alle recensioni, ok?
‫Ma ancora una volta, non vogliamo farlo.
‫Quindi, invece, implementeremo "Virtual Populate. ' (tasti che
‫fanno clic) Va
‫bene. E funziona così.
‫Quindi lo facciamo qui sullo schema del tour.
‫(clic dei tasti) E lo facciamo
‫ancora . virtuale.
‫Quindi, proprio come con questo campo virtuale
‫qui, durata settimana, quindi digitiamo il nome del campo virtuale.
‫Quindi chiamiamolo
‫"Recensioni" e quindi un oggetto di alcune opzioni.
‫E il primo è il
‫nome del modello a cui vogliamo fare riferimento.
‫E quindi funziona proprio come con il normale riferimento.
‫(tasti che fanno clic) Quindi,
‫di nuovo, il nome del modello.
‫Quindi, "Recensione" o ovviamente, in questo caso.
‫E ora, dobbiamo effettivamente specificare il nome dei campi
‫per connettere i due set di dati.
‫E questa è, per me, la parte più complicata dell'implementazione
‫di questo "popolamento virtuale". ' E
‫quindi, assicuriamoci che tu capisca davvero questa parte.
‫Quindi qui, dobbiamo specificare due campi.
‫Il campo estero e il campo locale.
‫Cominciamo quindi dal campo estero.
‫E così, questo è il nome del campo nell'altro modello.
‫Quindi nel modello Review
‫in questo caso, dove è memorizzato il riferimento al modello corrente.
‫E questo è, in questo caso, il campo del Tour, giusto?
‫Quindi, diamo un'occhiata a questo.
‫E così, ancora una volta, nel nostro modello di recensione,
‫abbiamo un campo chiamato 'Tour. ' Ed
‫è qui che viene memorizzato l'ID del tour.
‫Ed ecco perché qui, in
‫questo campo straniero, specifichiamo quel nome
‫di quel campo per collegare questi due modelli, ok?
‫E ora dobbiamo fare lo stesso per il modello attuale.
‫Quindi, dobbiamo dire dove quell'ID è effettivamente memorizzato
‫qui in questo modello Tour attuale.
‫Quindi, campo locale.
‫E cioè, l'ID.
‫Allora, _ID, ok?
‫E così, di nuovo, questo _ID, che
‫è così chiamato nel
‫modello locale, è chiamato 'Tour' nel modello straniero.
‫Quindi, nel modello Review. Bene?
‫E così di nuovo, ecco come
‫colleghiamo questi due modelli insieme.
‫Scriviamo qui
‫che questo è "Popolazione virtuale", ok?
‫E così ora, con questa configurazione,
‫possiamo effettivamente usare Popola proprio come facevamo prima.
‫E quindi quello che vogliamo fare
‫ora è andare avanti e
‫popolare il tour quando avremo un solo tour, ok?
‫Quindi qui a Postman, è in questa situazione di "Get Tour". ' Bene?
‫Vediamo se questo esiste davvero.
‫E lo fa, ma è questo strano giro di prova.
‫E quindi, facciamolo davvero con questo 'Forest Hiker'.
‫Tutto bene.
‫Quindi, quando avremo questo
‫tour, ora vogliamo popolare le recensioni.
‫E dovrebbe già essere qui come un array vuoto.
‫Ah, eccolo qui.
‫Non è un array vuoto, ma è impostato su "null. ' Ma
‫il campo virtuale in realtà
‫è già lì con le recensioni.
‫Ma a questo punto
‫è nullo perché non l'abbiamo ancora popolato, ok?
‫E ancora, vogliamo solo popolarlo qui
‫in "Ottieni
‫un tour" e non in "Ottieni tutti
‫i tour" perché sarebbe un po'
‫troppe informazioni da inviare a un cliente quando ottiene tutti i tour.
‫Inoltre, quando riceviamo tutti i tour,
‫di solito è per creare una pagina panoramica.
‫E in tal caso,
‫di solito non è necessario accedere a tutte le recensioni.
‫Ne abbiamo bisogno solo
‫quando mostriamo davvero un solo tour.
‫Bene? E quindi, penso che
‫abbia senso fare questo popolamento solo su "Get One Tour". '
‫Quindi, facciamolo popolare
‫direttamente nel controller.
‫Quindi, il controller del tour e quaggiù
‫dove abbiamo "Get Tour". ' E quindi,
‫in realtà è molto facile.
‫L'unica cosa da fare è chiamare "Popola"
‫dopo l'altra query, quindi passare semplicemente il nome del
‫campo che vogliamo popolare.
‫E così, come già sappiamo, si chiama 'Recensioni. ' E,
‫quindi, dovrebbe essere già così.
‫Tutto ok?
‫Quindi, proviamolo ora e diamo un'occhiata a questo.
‫E infatti, ora abbiamo la nostra recensione completa proprio qui.
‫Tutto ok? Quindi è stato popolato.
‫E quindi significa che il nostro popolamento
‫virtuale sta effettivamente funzionando.
‫Ora, potresti iniziare a
‫vedere che questo sta creando
‫una specie di problema perché questo qui
‫sta fondamentalmente creando una catena di popolazioni.
‫E questo non è affatto l'ideale.
‫Quindi, abbiamo il tour popolato di recensioni.
‫Ma poi le recensioni vengono nuovamente
‫popolate anche con il tour e anche con l'utente.
‫E poi anche il tour si
‫sta popolando di guide.
‫Cosa che in questo caso non avviene
‫perché non ci sono guide.
‫Ma se ci fosse, allora avremmo un altro popolo.
‫E quindi qui avremmo una catena di tre popolazioni.
‫E quindi per le prestazioni, ovviamente, non è affatto l'ideale.
‫Soprattutto qui con il tour.
‫Quindi abbiamo il tour popolato di recensioni.
‫E nelle recensioni, abbiamo di nuovo i dati sul tour.
‫E quindi non ha molto senso.
‫Quindi, è un po' un disastro ora.
‫Quindi, la soluzione che userò qui
‫è disattivare effettivamente
‫la compilazione delle recensioni con i tour, ok?
‫Quindi, in pratica, non abbiamo bisogno di questi dati qui su ogni recensione.
‫Quindi in questo caso, penso che sia una buona soluzione.
‫Ma ovviamente, sempre nel tuo caso, dipenderà sempre
‫da come funziona la
‫tua applicazione nel tuo caso specifico.
‫Ma in questa app è più logico avere
‫davvero le recensioni disponibili
‫sui tour, e non è così
‫importante avere il tour disponibile sulla recensione, ok?
‫Quindi, disattiviamo fondamentalmente quel popolamento, nel
‫modello Review.
‫Bene?
‫Quindi, commentiamo questa parte, copiatela
‫qui sotto
‫e quindi, fondamentalmente, sbarazziamoci di questa prima.
‫Ora tutto bene?
‫Preparati a risparmiare.
‫Proviamo di nuovo.
‫E così, ora dovremmo vedere solo l'ID del tour qui.
‫Bene? E infatti, è esattamente quello che otteniamo.
‫Bene? Ora con
‫questo, ovviamente, facciamo ancora riferimento ai genitori, ok?
‫Conserviamo ancora un riferimento ai tour qui,
‫ma semplicemente non lo compileremo.
‫E ancora, perché non abbiamo
‫sempre bisogno di quei dati proprio qui.
‫Tutto bene. Ricapitoliamo velocemente quello che abbiamo fatto qui.
‫Quindi, abbiamo iniziato a fare solo riferimento ai genitori sulla recensione.
‫Ma questo ha fatto sì
‫che durante i tour non avessimo accesso alle recensioni corrispondenti.
‫E la soluzione più semplice
‫sarebbe fare anche riferimento ai bambini durante i tour.
‫Ma il problema
‫sarebbe che in realtà non vogliamo
‫mantenere un array di tutti
‫i documenti figlio nel documento padre, giusto?
‫Perché ancora una volta,
‫non vogliamo consentire agli array di crescere indefinitamente.
‫Quindi, invece
‫di farlo, abbiamo implementato popolazioni virtuali come questa.
‫Tutto ok? Quindi, proprio così.
‫E questo ci permette di fare sostanzialmente la stessa identica cosa.
‫Quindi, mantenendo un riferimento a tutti i
‫documenti figlio
‫nel documento padre, ma senza effettivamente rendere
‫persistenti tali informazioni nel database.
‫E quindi, dopo aver impostato questo
‫popolamento virtuale, tutto ciò che dovevamo fare era
‫usare fondamentalmente Popola proprio come abbiamo fatto prima con i riferimenti reali.
‫E poi, finalmente, abbiamo
‫anche spento una delle popolazioni che avevamo sulla recensione.
‫Quindi, questo qui, dove
‫abbiamo popolato l'ID del tour, perché
‫stava creando una catena di popolamenti inefficiente.
‫E quindi è, ovviamente, qualcosa che non vogliamo.
‫E così, alla
‫fine, abbiamo ottenuto un risultato come questo, ok?
‫Grande.
‫Quindi, spero che abbia avuto senso per te.
‫E quindi con
‫questo, per ora concludiamo questa parte del popolamento, ok?
‫E quindi ora passiamo a un argomento
‫successivo, che sostanzialmente è la creazione di percorsi nidificati.