‫Insegnante: Quindi ricorda come
‫nel video sul nostro modello di dati, abbiamo
‫detto che potevamo incorporare o fare riferimento
‫ai dati della guida turistica, quindi
‫in questo video ti mostrerò come possiamo implementare l'incorporamento di
‫documenti della guida turistica in un documento del tour.
‫Quindi di nuovo, in questa lezione incorporeremo
‫i documenti degli utenti nei documenti del tour, e poi
‫nel prossimo video, ti
‫mostrerò come possiamo effettivamente fare riferimento
‫agli utenti invece di incorporarli, va bene?
‫Quindi l'idea qui è che durante la
‫creazione di un nuovo documento del tour, l'utente
‫aggiungerà semplicemente una serie di ID utente, quindi otterremo
‫i documenti utente corrispondenti basati su questi
‫ID e li aggiungeremo
‫ai nostri documenti del tour.
‫Quindi, in altre parole, li inseriamo nel nostro tour, ok?
‫Quindi, facciamolo qui ora.
‫Quindi le guide saranno del tipo array, ok?
‫Molto semplice, e in realtà prima di implementare
‫qualsiasi codice, lascia che ti mostri come
‫esempio come funzionerebbe durante la creazione di un nuovo tour.
‫Quindi, torniamo a Postman
‫qui e creiamo un nuovo tour,
‫ok, quindi qui
‫nel nostro corpo ovviamente aggiungeremmo ora le guide, le
‫citazioni e quindi specificare una serie di ID, ok?
‫Quindi, prendiamo alcuni ID utente.
‫Quindi, prendi tutti gli utenti, vediamo cosa abbiamo qui.
‫Quindi abbiamo una guida qui, in
‫realtà, e quindi prendiamo
‫questo ID insieme alle virgolette,
‫in realtà, quindi
‫mettiamolo qui e aggiungiamone altri.
‫Quindi, anche questo qui e in realtà solo questi due.
‫Dovrebbe essere sufficiente per testare questa roba, ok, quindi è così che
‫creeremo un nuovo tour
‫con due guide, ok, e di nuovo una
‫volta salvato questo tour, allora, dietro
‫le quinte,
‫recupereremo il due
‫documenti utente corrispondenti a questi due ID, va bene?
‫Quindi, implementiamolo e nel
‫nostro modello
‫il posto migliore per farlo
‫è un middleware pre-salvato, giusto?
‫Quindi, ciò accadrà automaticamente dietro le quinte,
‫in pratica, ogni
‫volta che viene salvato un nuovo tour, e in
‫realtà non voglio farlo qui.
‫Quindi abbiamo una query,
‫qui, ecco il documento "Middleware",
‫quindi facciamolo qui.
‫Quindi tourSchema. pre,
‫va bene, chiamiamo subito dopo qui, così non
‫lo dimentichiamo alla fine.
‫Ok, allora abbiamo questo. guide come input e ricorda che questo
‫sarà un array di tutti gli
‫ID utente, giusto, quindi li esamineremo in sequenza usando
‫un file . map, e
‫poi in ogni iterazione
‫ottieni il documento utente per
‫l'ID corrente, ok, e lo memorizzeremo all'interno delle guide, ok?
‫Quindi, l'elemento corrente, che sarà l'ID, in
‫realtà chiamiamolo ID
‫per renderlo un po' più facile
‫da capire, e quindi ora abbiamo effettivamente bisogno dell'utente,
‫giusto, quindi andiamo avanti e importiamolo.
‫Quindi, cost User,
‫require, ed
‫è effettivamente nella stessa cartella qui, va bene, quindi
‫User. findByID
‫con l'ID corrente, va bene?
‫Ma ora, tieni presente che
‫in realtà dobbiamo attendere questa promessa qui, giusto e quindi, quindi, la
‫funzione deve essere contrassegnata come
‫asincrona, ma ora abbiamo
‫effettivamente un problema, va bene, perché il
‫file . map assegnerà il
‫risultato di ogni iterazione al nuovo elemento nell'array
‫delle guide, ok, quindi ora abbiamo una
‫funzione asincrona qui e,
‫come sai, che restituisce una promessa, quindi
‫in questo momento questo array di
‫guide qui è fondamentalmente una serie piena di promesse, ok.
‫In realtà chiamiamo queste guidePromises e quindi
‫ora abbiamo effettivamente bisogno
‫di eseguire tutte queste promesse, fondamentalmente allo stesso tempo.
‫Come ti ho mostrato un po' prima
‫in questo codice, almeno se
‫non hai saltato la sezione JavaScript asincrono,
‫tutto ciò che dobbiamo fare è attendere Promise. all e poi guidePromise,
‫okay, e possiamo assegnare
‫direttamente il risultato di questo
‫a questo. guide, e quindi in
‫pratica sovrascrivere quella serie di ID del
‫tempio con una serie di documenti utente, ok, e poiché
‫ora stiamo usando
‫wait qui, dobbiamo contrassegnare questa funzione come asincrona, ok?
‫Salvalo e penso che sia davvero così, ok?
‫Quindi, di nuovo, dobbiamo usare Promise. tutto qui perché
‫il risultato di tutto questo qui è una promessa,
‫okay, e quindi questo array qui sarà un
‫array pieno di promesse che
‫poi eseguiamo aspettando Promise. tutto ok?
‫Quindi, testiamolo ora, e
‫abbiamo già tutto questo codice pronto, dovremmo
‫solo cambiare questo nome qui.
‫Quindi, "Test Tour", ma gli ID sono già qui.
‫Quindi inviamo questo e il nome del nostro tour deve essere
‫più lungo, "New Task Tour". ' Va
‫bene, ma ora diamo un'occhiata ai nostri risultati, e
‫così effettivamente otteniamo le nostre guide qui, ok?
‫Quindi questi sono i documenti
‫completi, e in effetti non solo gli ID, giusto?
‫Ottimo, ecco come
‫potremmo implementare l'incorporamento per questo esempio di guide turistiche.
‫Ora, questo semplice codice che abbiamo implementato
‫qui ovviamente funziona solo per creare nuovi documenti,
‫non per aggiornarli, giusto?
‫Quindi ora dovremmo andare
‫avanti e implementare questa stessa logica anche per gli aggiornamenti.
‫Tuttavia, non lo farò perché, ricorda
‫dal video in cui abbiamo modellato i nostri
‫dati, che in questo
‫caso ci sono alcuni svantaggi nell'incorporare questi dati.
‫Ad esempio, immagina che una guida turistica
‫aggiorni il suo indirizzo e-mail o che cambi
‫il suo ruolo da guida a guida principale.
‫Ogni volta che si verifica uno di questi cambiamenti,
‫dovresti controllare se un tour ha
‫quell'utente come guida e, in tal caso, aggiornare
‫anche il tour, quindi è davvero
‫molto lavoro e non lo siamo
‫andrò in
‫quella direzione, va bene?
‫Ora, volevo ancora mostrarti come funziona
‫davvero l'incorporamento e
‫come potremmo implementarlo in questa
‫situazione perché credo davvero che sia molto
‫importante che tu sappia ancora come
‫fare tutto nel caso
‫ne avessi bisogno nelle tue
‫applicazioni, ok, ma in questa
‫particolare situazione, invece di incorporare, utilizzeremo il riferimento,
‫e ho parlato dei motivi
‫per farlo in quel video, ok?
‫Quindi, andiamo avanti e facciamolo bene
‫nella prossima lezione.