﻿1
00:00:01,100 --> 00:00:03,780
‫Istruttore: Usiamo ora un processo chiamato

2
00:00:03,780 --> 00:00:06,610
‫popola per ottenere effettivamente l'accesso alle guide

3
00:00:06,610 --> 00:00:10,173
‫turistiche di riferimento ogni volta che richiediamo un determinato tour.

4
00:00:11,820 --> 00:00:14,290
‫Quindi, nell'ultimo video, abbiamo creato

5
00:00:14,290 --> 00:00:17,660
‫un riferimento all'utente, qui in questo campo delle guide,

6
00:00:17,660 --> 00:00:20,180
‫proprio nel nostro modello di tour, giusto?

7
00:00:20,180 --> 00:00:22,840
‫E ora useremo popola per sostituire sostanzialmente

8
00:00:22,840 --> 00:00:25,610
‫i campi a cui abbiamo fatto riferimento

9
00:00:25,610 --> 00:00:28,210
‫con i dati correlati effettivi.

10
00:00:28,210 --> 00:00:30,330
‫E il risultato sembrerà

11
00:00:30,330 --> 00:00:32,920
‫che i dati siano sempre stati

12
00:00:32,920 --> 00:00:35,100
‫incorporati, quando in realtà, come

13
00:00:35,100 --> 00:00:38,280
‫sappiamo, sono in una raccolta completamente diversa, ok?

14
00:00:38,280 --> 00:00:41,940
‫Ora, il processo di compilazione avviene sempre in una query.

15
00:00:41,940 --> 00:00:44,713
‫E quindi andiamo ora al nostro controller

16
00:00:46,000 --> 00:00:50,340
‫del tour, quindi direttamente alla funzione in cui otteniamo un singolo tour.

17
00:00:50,340 --> 00:00:52,460
‫Quindi qui, in tour.

18
00:00:52,460 --> 00:00:55,440
‫Ed ecco la nostra domanda, giusto?

19
00:00:55,440 --> 00:00:57,831
‫Quindi qui è dove costruiamo la nostra query.

20
00:00:57,831 --> 00:01:00,450
‫E ora tutto ciò che dobbiamo fare è

21
00:01:00,450 --> 00:01:02,183
‫aggiungere il popolamento alla query.

22
00:01:04,370 --> 00:01:07,440
‫Quindi compila, e poi il nome del campo

23
00:01:07,440 --> 00:01:09,250
‫che vogliamo effettivamente popolare

24
00:01:10,490 --> 00:01:12,533
‫e che si chiama guide, ok?

25
00:01:13,950 --> 00:01:17,850
‫E se ci pensi, questo nome ha davvero senso.

26
00:01:17,850 --> 00:01:21,080
‫Quindi vogliamo popolare quindi fondamentalmente per

27
00:01:21,080 --> 00:01:24,940
‫riempire il campo chiamato guide nel nostro modello.

28
00:01:24,940 --> 00:01:27,870
‫Giusto, quindi di nuovo, questo campo delle guide

29
00:01:27,870 --> 00:01:29,860
‫contiene solo il riferimento.

30
00:01:29,860 --> 00:01:32,620
‫e con popola lo riempiremo con

31
00:01:32,620 --> 00:01:36,750
‫i dati effettivi, va bene e di nuovo solo nella

32
00:01:36,750 --> 00:01:39,890
‫query e non nel database effettivo, ok?

33
00:01:39,890 --> 00:01:41,840
‫Quindi, questo è davvero tutto ciò che dobbiamo fare.

34
00:01:41,840 --> 00:01:46,760
‫E ora diamo un'occhiata al risultato, ok?

35
00:01:46,760 --> 00:01:51,760
‫Quindi, questo è l'id del tour e ricordiamo che è così che

36
00:01:51,840 --> 00:01:55,370
‫sembrano le guide, in questo momento, ok?

37
00:01:55,370 --> 00:01:59,323
‫Ma se ora otteniamo tour e con

38
00:02:01,170 --> 00:02:03,260
‫quell'id, allora aspettiamo

39
00:02:03,260 --> 00:02:07,220
‫ora, e infatti, ecco i dati sulle guide.

40
00:02:07,220 --> 00:02:10,720
‫Ok, quindi questi due elementi che avevamo già

41
00:02:10,720 --> 00:02:14,600
‫nelle guide, ora sono stati popolati con i dati effettivi.

42
00:02:14,600 --> 00:02:17,373
‫E se ora diamo un'occhiata a ottieni

43
00:02:18,550 --> 00:02:21,933
‫tutti i tour, sbarazziamoci di alcune di queste cose qui.

44
00:02:22,842 --> 00:02:25,073
‫Abbiamo troppe cose aperte qui.

45
00:02:26,010 --> 00:02:28,423
‫Quindi se ora otteniamo tutti i tour,

46
00:02:29,730 --> 00:02:31,820
‫ok, allora scorriamo fino alla fine

47
00:02:31,820 --> 00:02:33,280
‫dove dovrebbe essere

48
00:02:36,030 --> 00:02:38,590
‫quello nuovo e apparentemente ora va bene,

49
00:02:38,590 --> 00:02:40,690
‫oh è perché ho questo filtro

50
00:02:41,840 --> 00:02:46,610
‫qui, sbarazziamoci di quello, e ora ho il mio 10 risultati ed effettivamente è

51
00:02:46,610 --> 00:02:49,270
‫proprio qui, quindi il nuovo tour di prova.

52
00:02:49,270 --> 00:02:52,290
‫E ora vedi che qui è tornato

53
00:02:52,290 --> 00:02:55,860
‫a mostrarci solo i valori che sono effettivamente nel database.

54
00:02:55,860 --> 00:02:58,010
‫Quindi confermiamolo anche qui in Compass.

55
00:03:01,940 --> 00:03:05,200
‫E così in effetti, come vedi, non

56
00:03:05,200 --> 00:03:09,750
‫abbiamo ancora i dati effettivi qui nel database, ma solo gli ID.

57
00:03:09,750 --> 00:03:13,290
‫Ok, ed è solo quel passaggio di compilazione che

58
00:03:13,290 --> 00:03:16,540
‫sostituirà questi ID con i dati effettivi, ok?

59
00:03:16,540 --> 00:03:18,740
‫E quindi proprio qui, ciò

60
00:03:18,740 --> 00:03:21,260
‫non accade bene perché non abbiamo implementato

61
00:03:21,260 --> 00:03:24,200
‫il popolamento nel gestore del percorso get all tours.

62
00:03:24,200 --> 00:03:27,950
‫Ok, ora lascia che ti mostri un piccolo trucco che

63
00:03:27,950 --> 00:03:30,490
‫possiamo fare con la funzione popola.

64
00:03:30,490 --> 00:03:33,590
‫Che è in realtà anche solo selezionare determinati campi.

65
00:03:33,590 --> 00:03:38,370
‫Quindi, per esempio, non siamo interessati a questa proprietà v qui e

66
00:03:38,370 --> 00:03:41,350
‫nemmeno a passwordChangedAt right, quindi non è

67
00:03:41,350 --> 00:03:42,683
‫il tipo di

68
00:03:42,683 --> 00:03:45,660
‫dati che vogliamo sulle nostre guide turistiche.

69
00:03:45,660 --> 00:03:49,197
‫E quindi qui in popola, possiamo effettivamente specificarlo.

70
00:03:49,197 --> 00:03:52,230
‫Quindi, invece di passare semplicemente la

71
00:03:52,230 --> 00:03:55,280
‫stringa, possiamo creare un oggetto di

72
00:03:56,620 --> 00:03:57,793
‫opzioni e

73
00:03:59,440 --> 00:04:02,850
‫quindi possiamo dire, il percorso è guide,

74
00:04:02,850 --> 00:04:07,850
‫quindi in pratica, il nome del campo che vogliamo sostituire, e

75
00:04:09,800 --> 00:04:11,553
‫quindi, come al

76
00:04:12,710 --> 00:04:16,970
‫solito, possiamo usare select , e poi meno, questo

77
00:04:16,970 --> 00:04:21,790
‫qui e anche l'altro, quindi passwordChangedAt, è solo più facile

78
00:04:21,790 --> 00:04:25,370
‫da copiare, va bene, quindi cambiamolo qui

79
00:04:25,370 --> 00:04:27,603
‫e invialo di nuovo.

80
00:04:28,600 --> 00:04:31,800
‫E questo ovviamente non è il percorso giusto,

81
00:04:31,800 --> 00:04:35,910
‫quindi mi dispiace per quello, penso di averlo usato anche prima

82
00:04:35,910 --> 00:04:38,143
‫in realtà dove volevo mostrarti questo,

83
00:04:39,040 --> 00:04:42,970
‫giusto, e mi dispiace per quello, ma comunque quello che

84
00:04:42,970 --> 00:04:45,920
‫vogliamo liberarci di qui c'è questa V

85
00:04:45,920 --> 00:04:47,510
‫e questa passwordChangedAt.

86
00:04:47,510 --> 00:04:49,230
‫E quindi l'abbiamo

87
00:04:49,230 --> 00:04:51,737
‫già fatto, quindi se lo inviamo

88
00:04:51,737 --> 00:04:55,810
‫ora, ovviamente otteniamo solo i dati che ci interessano.

89
00:04:55,810 --> 00:04:58,540
‫Va bene, quindi questa funzione di popolamento è

90
00:04:58,540 --> 00:05:01,110
‫uno strumento assolutamente fondamentale per lavorare con

91
00:05:01,110 --> 00:05:03,160
‫i dati in Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫E soprattutto, ovviamente, quando

93
00:05:04,790 --> 00:05:06,760
‫ci sono relazioni tra i

94
00:05:06,760 --> 00:05:09,860
‫dati, ok, quindi dovresti sempre sapere esattamente come e

95
00:05:09,860 --> 00:05:12,220
‫quando utilizzarli per le tue applicazioni.

96
00:05:12,220 --> 00:05:15,040
‫E per allenarci a questo, lo useremo

97
00:05:15,040 --> 00:05:18,200
‫ovviamente molte volte di più in questa sezione.

98
00:05:18,200 --> 00:05:21,140
‫Ora, solo una cosa che voglio che tu

99
00:05:21,140 --> 00:05:24,280
‫tenga a mente, è che dietro le quinte, l'uso di

100
00:05:24,280 --> 00:05:26,300
‫popolare creerà comunque una nuova

101
00:05:26,300 --> 00:05:29,290
‫query e quindi questo potrebbe influire sulle tue prestazioni.

102
00:05:29,290 --> 00:05:31,985
‫Ok, ovviamente se lo fai solo una o

103
00:05:31,985 --> 00:05:35,430
‫due volte e in una specie di piccola applicazione, allora quel piccolo

104
00:05:35,430 --> 00:05:38,170
‫successo sulle prestazioni non è affatto un grosso problema.

105
00:05:38,170 --> 00:05:40,944
‫Ma in un'applicazione enorme, con tonnellate

106
00:05:40,944 --> 00:05:43,469
‫di popolazione dappertutto, allora potrebbe

107
00:05:43,469 --> 00:05:46,450
‫davvero avere qualche tipo di effetto, ok?

108
00:05:46,450 --> 00:05:47,960
‫Quindi tienilo a mente.

109
00:05:47,960 --> 00:05:51,430
‫Ok, e ha davvero senso, proprio perché in quale

110
00:05:51,430 --> 00:05:54,700
‫altro modo Mongoose sarebbe in grado di ottenere dati

111
00:05:54,700 --> 00:05:57,700
‫su tour e utenti allo stesso tempo.

112
00:05:57,700 --> 00:06:01,050
‫Fondamentalmente è necessario creare una nuova query

113
00:06:01,050 --> 00:06:03,960
‫per poter creare questa connessione.

114
00:06:03,960 --> 00:06:06,060
‫Ok e ora solo per finire, ricordiamo

115
00:06:06,060 --> 00:06:07,763
‫quello che ti ho

116
00:06:07,763 --> 00:06:11,610
‫mostrato che in realtà non ha funzionato quando abbiamo fatto tutti i tour.

117
00:06:11,610 --> 00:06:15,460
‫Quindi, ricorda come in questa situazione otteniamo semplicemente gli

118
00:06:15,460 --> 00:06:18,620
‫ID delle guide turistiche e non i

119
00:06:18,620 --> 00:06:20,850
‫dati utente di riferimento.

120
00:06:20,850 --> 00:06:24,050
‫Ok, quindi una soluzione sarebbe fondamentalmente copiare questo

121
00:06:24,050 --> 00:06:27,956
‫codice qui, quindi questa funzione di popolamento, anche qui in

122
00:06:27,956 --> 00:06:30,950
‫questo gestore di route, ma ovviamente

123
00:06:30,950 --> 00:06:34,390
‫il codice duplicato non è mai una buona idea.

124
00:06:34,390 --> 00:06:35,635
‫E spero che

125
00:06:35,635 --> 00:06:39,640
‫tu sappia già a questo punto un modo migliore per farlo.

126
00:06:39,640 --> 00:06:42,310
‫E la risposta è un middleware di query.

127
00:06:42,310 --> 00:06:46,833
‫Ok, quindi andiamo avanti e passiamo al nostro modello, e

128
00:06:47,910 --> 00:06:49,620
‫sto copiando questo

129
00:06:51,731 --> 00:06:55,253
‫codice qui ora e quindi, sì, facciamolo qui.

130
00:06:57,580 --> 00:06:58,413
‫Quindi,

131
00:06:59,430 --> 00:07:03,460
‫un pre e poi lo farò proprio come prima

132
00:07:03,460 --> 00:07:06,640
‫con un'espressione regolare, che funzionerà per tutto

133
00:07:06,640 --> 00:07:09,363
‫ciò che inizia con find.

134
00:07:11,830 --> 00:07:13,083
‫Quindi, proprio

135
00:07:17,010 --> 00:07:21,500
‫così, Ok, e ovviamente lo facciamo nel middleware di query, perché questo

136
00:07:21,500 --> 00:07:23,820
‫è il tipo di middleware che

137
00:07:23,820 --> 00:07:27,000
‫verrà eseguito ogni volta che c'è una query.

138
00:07:27,000 --> 00:07:30,540
‫Bene, mettiamo insieme tutti questi middleware pre

139
00:07:32,180 --> 00:07:34,943
‫e poi abbiamo quello post.

140
00:07:37,230 --> 00:07:42,230
‫Va bene, quindi fammi copiare il codice che avevamo prima e

141
00:07:42,660 --> 00:07:45,410
‫ora aggiungiamolo a questo, perché ricorda

142
00:07:45,410 --> 00:07:47,620
‫che nel middleware delle

143
00:07:47,620 --> 00:07:50,810
‫query, questo punta sempre alla query corrente.

144
00:07:50,810 --> 00:07:53,760
‫E quindi ora praticamente tutte le query

145
00:07:53,760 --> 00:07:56,560
‫popoleranno automaticamente il campo delle guide

146
00:07:56,560 --> 00:07:58,740
‫con l'utente di riferimento.

147
00:07:58,740 --> 00:08:02,053
‫Ok, quindi ora possiamo liberarcene qui.

148
00:08:05,040 --> 00:08:07,770
‫E sì, è proprio così.

149
00:08:07,770 --> 00:08:09,720
‫Quindi ora lo facciamo qui,

150
00:08:09,720 --> 00:08:12,040
‫invece di farlo in due posti, nel controller.

151
00:08:12,040 --> 00:08:15,200
‫E quindi questo è un simpatico trucchetto nel caso in cui

152
00:08:15,200 --> 00:08:17,713
‫tu voglia sempre popolare tutti i tuoi documenti.

153
00:08:19,130 --> 00:08:20,923
‫Quindi, proviamolo.

154
00:08:21,940 --> 00:08:23,993
‫Primo, se funziona ancora qui.

155
00:08:24,840 --> 00:08:27,553
‫E in effetti lo fa, quindi otteniamo i nostri due utenti.

156
00:08:28,530 --> 00:08:32,120
‫E poi testiamolo qui dove prima non

157
00:08:32,120 --> 00:08:36,060
‫funzionava e ora funziona, quindi ecco il risultato.

158
00:08:36,060 --> 00:08:38,790
‫E ora, solo per assicurarci

159
00:08:38,790 --> 00:08:43,384
‫che funzioni davvero, aggiorniamolo e fondamentalmente aggiungiamo un'altra guida turistica.

160
00:08:43,384 --> 00:08:48,320
‫Quindi copiamo l'id del tour qui, quindi aggiorniamo tour, quindi dobbiamo

161
00:08:49,300 --> 00:08:51,160
‫mettere l'id qui,

162
00:08:51,160 --> 00:08:55,563
‫e poi nel corpo prendiamolo da create tour, quindi

163
00:08:58,140 --> 00:08:59,433
‫questa guida,

164
00:09:02,040 --> 00:09:04,360
‫e mettiamolo qui, e poi

165
00:09:04,360 --> 00:09:07,410
‫dobbiamo anche ottenere il nostro altro utente.

166
00:09:07,410 --> 00:09:10,960
‫Quindi, è questo qui, che in realtà non è una

167
00:09:10,960 --> 00:09:14,710
‫guida o nemmeno un amministratore, ma questo è solo per il

168
00:09:14,710 --> 00:09:16,933
‫test, quindi prendiamo questo ID

169
00:09:19,450 --> 00:09:22,423
‫e poi andiamo avanti e lo mettiamo qui.

170
00:09:24,090 --> 00:09:28,640
‫Quindi, aggiorniamolo, funziona ancora, e quindi ora in realtà,

171
00:09:28,640 --> 00:09:31,070
‫anche in questo

172
00:09:31,070 --> 00:09:34,130
‫output, abbiamo già i dati popolati.

173
00:09:34,130 --> 00:09:36,410
‫Ok, perché nella nostra espressione regolare ricorda

174
00:09:36,410 --> 00:09:38,300
‫che abbiamo usato find.

175
00:09:38,300 --> 00:09:42,450
‫Quindi, questo aggiornamento qui viene implementato usando find by id e

176
00:09:42,450 --> 00:09:45,465
‫update, e quindi inizia anche con find e

177
00:09:45,465 --> 00:09:49,110
‫quindi anche il middleware di query che eravamo prima si

178
00:09:49,110 --> 00:09:51,690
‫applica anche a questa funzione.

179
00:09:51,690 --> 00:09:55,440
‫Ok, ecco come funziona il popolamento.

180
00:09:55,440 --> 00:09:58,640
‫Ok, ancora una volta, strumento estremamente importante nella tua

181
00:09:58,640 --> 00:10:01,200
‫cassetta degli attrezzi Mangusta, va bene.

182
00:10:01,200 --> 00:10:02,910
‫E giusto per essere

183
00:10:02,910 --> 00:10:05,770
‫sicuri, prendiamoci 15 secondi qui per ricapitolare.

184
00:10:05,770 --> 00:10:08,700
‫Quindi questo è un processo in due fasi.

185
00:10:08,700 --> 00:10:12,080
‫Innanzitutto, crei un riferimento a un altro modello.

186
00:10:12,080 --> 00:10:14,680
‫E così, con questo, crei efficacemente

187
00:10:14,680 --> 00:10:17,410
‫la relazione tra questi due set di dati.

188
00:10:17,410 --> 00:10:20,349
‫Quindi, nel secondo passaggio, si compila

189
00:10:20,349 --> 00:10:23,010
‫il campo appena specificato in

190
00:10:23,010 --> 00:10:26,920
‫precedenza, quindi le guide utilizzano il metodo popola.

191
00:10:26,920 --> 00:10:30,350
‫Va bene, molto semplice, molto diretto, tutto ciò di cui

192
00:10:30,350 --> 00:10:32,330
‫hai bisogno è capire veramente

193
00:10:32,330 --> 00:10:34,620
‫la logica dietro tutto questo e

194
00:10:34,620 --> 00:10:37,163
‫poi sei pronto per iniziare a usarlo davvero.

