﻿1
00:00:01,100 --> 00:00:03,780
‫Instructeur : Utilisons maintenant un processus

2
00:00:03,780 --> 00:00:06,610
‫appelé populate afin d'avoir accès aux guides touristiques

3
00:00:06,610 --> 00:00:10,173
‫référencés chaque fois que nous interrogeons pour une certaine visite.

4
00:00:11,820 --> 00:00:14,290
‫Donc, dans la dernière vidéo, nous avons

5
00:00:14,290 --> 00:00:17,660
‫créé une référence à l'utilisateur, ici dans ce champ de guides,

6
00:00:17,660 --> 00:00:20,180
‫directement dans notre modèle de tournée, non ?

7
00:00:20,180 --> 00:00:22,840
‫Et maintenant, nous allons utiliser populate afin

8
00:00:22,840 --> 00:00:25,610
‫de remplacer essentiellement les champs que nous avons

9
00:00:25,610 --> 00:00:28,210
‫référencés par les données associées réelles.

10
00:00:28,210 --> 00:00:30,330
‫Et le résultat de cela donnera

11
00:00:30,330 --> 00:00:32,920
‫l'impression que les données ont toujours été intégrées,

12
00:00:32,920 --> 00:00:35,100
‫alors qu'en fait, comme nous le savons,

13
00:00:35,100 --> 00:00:38,280
‫elles se trouvent dans une collection complètement différente, d'accord ?

14
00:00:38,280 --> 00:00:41,940
‫Désormais, le processus de remplissage se produit toujours dans une requête.

15
00:00:41,940 --> 00:00:44,713
‫Et donc passons maintenant à notre contrôleur

16
00:00:46,000 --> 00:00:50,340
‫de tournée, puis directement à la fonction où nous obtenons une seule tournée.

17
00:00:50,340 --> 00:00:52,460
‫Alors ici, en tournée.

18
00:00:52,460 --> 00:00:55,440
‫Et voici notre requête, n'est-ce pas ?

19
00:00:55,440 --> 00:00:57,831
‫C'est donc ici que nous construisons notre requête.

20
00:00:57,831 --> 00:01:00,450
‫Et maintenant, tout ce que nous avons à faire est

21
00:01:00,450 --> 00:01:02,183
‫d'ajouter la population à la requête.

22
00:01:04,370 --> 00:01:07,440
‫Alors remplissez, puis le nom du champ que

23
00:01:07,440 --> 00:01:09,250
‫nous voulons réellement remplir

24
00:01:10,490 --> 00:01:12,533
‫et qui s'appelle guides, d'accord ?

25
00:01:13,950 --> 00:01:17,850
‫Et si vous y réfléchissez, ce nom a un sens.

26
00:01:17,850 --> 00:01:21,080
‫Nous voulons donc remplir le

27
00:01:21,080 --> 00:01:24,940
‫champ appelé guides dans notre modèle.

28
00:01:24,940 --> 00:01:27,870
‫Bon, encore une fois, ce champ guides ne

29
00:01:27,870 --> 00:01:29,860
‫contient que la référence.

30
00:01:29,860 --> 00:01:32,620
‫et avec popup, nous allons ensuite le remplir

31
00:01:32,620 --> 00:01:36,750
‫avec les données réelles, d'accord et encore une fois uniquement dans la requête

32
00:01:36,750 --> 00:01:39,890
‫et non dans la base de données réelle, d'accord ?

33
00:01:39,890 --> 00:01:41,840
‫Donc, c'est vraiment tout ce que nous devons faire.

34
00:01:41,840 --> 00:01:46,760
‫Et regardons maintenant le résultat, d'accord ?

35
00:01:46,760 --> 00:01:51,760
‫Donc, c'est l'identifiant de la tournée et rappelons-nous que c'est à quoi

36
00:01:51,840 --> 00:01:55,370
‫ressemblent les guides, en ce moment, d'accord ?

37
00:01:55,370 --> 00:01:59,323
‫Mais si nous obtenons maintenant une visite et avec

38
00:02:01,170 --> 00:02:03,260
‫cet identifiant, alors attendons-le

39
00:02:03,260 --> 00:02:07,220
‫maintenant, et en effet, voici les données sur les guides.

40
00:02:07,220 --> 00:02:10,720
‫D'accord, ces deux éléments que nous avions déjà dans

41
00:02:10,720 --> 00:02:14,600
‫les guides ont maintenant été remplis avec les données réelles.

42
00:02:14,600 --> 00:02:17,373
‫Et si nous examinons maintenant toutes les

43
00:02:18,550 --> 00:02:21,933
‫tournées, débarrassons-nous en fait de certains de ces éléments ici.

44
00:02:22,842 --> 00:02:25,073
‫Nous avons trop de choses ouvertes ici.

45
00:02:26,010 --> 00:02:28,423
‫Donc si nous obtenons maintenant toutes les

46
00:02:29,730 --> 00:02:31,820
‫tournées, d'accord, alors faisons défiler jusqu'à

47
00:02:31,820 --> 00:02:33,280
‫la fin où

48
00:02:36,030 --> 00:02:38,590
‫la nouvelle devrait être et apparemment c'est maintenant

49
00:02:38,590 --> 00:02:40,690
‫bien, oh c'est parce que j'ai

50
00:02:41,840 --> 00:02:46,610
‫ce filtre ici, débarrassons-nous de ça, et maintenant j'ai mon 10 résultats et en fait

51
00:02:46,610 --> 00:02:49,270
‫c'est juste ici, donc la nouvelle tournée d'essai.

52
00:02:49,270 --> 00:02:52,290
‫Et maintenant, vous voyez qu'ici, il s'agit de nous

53
00:02:52,290 --> 00:02:55,860
‫montrer uniquement les valeurs qui sont réellement dans la base de données.

54
00:02:55,860 --> 00:02:58,010
‫Alors confirmons également cela ici dans Compass.

55
00:03:01,940 --> 00:03:05,200
‫Et donc en effet, comme vous le voyez, nous n'avons

56
00:03:05,200 --> 00:03:09,750
‫toujours pas les données réelles ici dans la base de données, mais seulement vraiment les identifiants.

57
00:03:09,750 --> 00:03:13,290
‫D'accord, et c'est seulement cette étape de remplissage qui remplacera

58
00:03:13,290 --> 00:03:16,540
‫ensuite ces identifiants par les données réelles, d'accord ?

59
00:03:16,540 --> 00:03:18,740
‫Et donc ici, cela ne se

60
00:03:18,740 --> 00:03:21,260
‫passe pas bien parce que nous n'avons pas

61
00:03:21,260 --> 00:03:24,200
‫implémenté la population dans le gestionnaire d'itinéraire get all tours.

62
00:03:24,200 --> 00:03:27,950
‫Bon, maintenant laissez-moi vous montrer une petite astuce que nous pouvons

63
00:03:27,950 --> 00:03:30,490
‫faire avec la fonction de remplissage.

64
00:03:30,490 --> 00:03:33,590
‫Ce qui consiste en fait à sélectionner simplement certains champs.

65
00:03:33,590 --> 00:03:38,370
‫Ainsi, par exemple, nous ne sommes pas intéressés par cette propriété v ici et pas

66
00:03:38,370 --> 00:03:41,350
‫non plus par passwordChangedAt à droite, ce n'est donc

67
00:03:41,350 --> 00:03:42,683
‫pas le genre

68
00:03:42,683 --> 00:03:45,660
‫de données que nous voulons sur nos guides touristiques.

69
00:03:45,660 --> 00:03:49,197
‫Et donc ici dans popup, nous pouvons effectivement le spécifier.

70
00:03:49,197 --> 00:03:52,230
‫Donc, au lieu de simplement passer

71
00:03:52,230 --> 00:03:55,280
‫la chaîne, nous pouvons créer un

72
00:03:56,620 --> 00:03:57,793
‫objet d'options

73
00:03:59,440 --> 00:04:02,850
‫et ensuite nous pouvons dire, le chemin

74
00:04:02,850 --> 00:04:07,850
‫est des guides, donc fondamentalement, le nom du champ que

75
00:04:09,800 --> 00:04:11,553
‫nous voulons remplacer,

76
00:04:12,710 --> 00:04:16,970
‫puis, comme d'habitude, nous pouvons utiliser select , et

77
00:04:16,970 --> 00:04:21,790
‫puis moins, celui-ci ici et aussi, l'autre, donc passwordChangedAt, c'est

78
00:04:21,790 --> 00:04:25,370
‫juste plus facile à copier, d'accord, alors

79
00:04:25,370 --> 00:04:27,603
‫changeons-le ici, et renvoyons-le.

80
00:04:28,600 --> 00:04:31,800
‫Et ce n'est bien sûr pas le bon itinéraire, donc

81
00:04:31,800 --> 00:04:35,910
‫désolé pour ça, je pense que je l'ai aussi utilisé avant en fait

82
00:04:35,910 --> 00:04:38,143
‫où je voulais vraiment vous montrer

83
00:04:39,040 --> 00:04:42,970
‫celui-ci, n'est-ce pas, et tellement désolé pour ça, mais toujours ce dont

84
00:04:42,970 --> 00:04:45,920
‫nous voulons nous débarrasser d'ici est ce V et

85
00:04:45,920 --> 00:04:47,510
‫ce mot de passeChangedAt.

86
00:04:47,510 --> 00:04:49,230
‫Et donc nous l'avons

87
00:04:49,230 --> 00:04:51,737
‫déjà fait, donc si nous l'envoyons maintenant,

88
00:04:51,737 --> 00:04:55,810
‫alors bien sûr nous n'obtiendrons que les données qui nous intéressent.

89
00:04:55,810 --> 00:04:58,540
‫Très bien, donc cette fonction de remplissage est

90
00:04:58,540 --> 00:05:01,110
‫un outil absolument fondamental pour travailler avec

91
00:05:01,110 --> 00:05:03,160
‫des données dans Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫Et surtout, bien sûr,

93
00:05:04,790 --> 00:05:06,760
‫lorsqu'il existe des relations entre les

94
00:05:06,760 --> 00:05:09,860
‫données, d'accord, vous devez donc toujours savoir exactement comment et

95
00:05:09,860 --> 00:05:12,220
‫quand les utiliser pour vos propres applications.

96
00:05:12,220 --> 00:05:15,040
‫Et pour s'entrainer à cela, nous l'utiliserons bien

97
00:05:15,040 --> 00:05:18,200
‫sûr de nombreuses fois tout au long de cette section.

98
00:05:18,200 --> 00:05:21,140
‫Maintenant, une chose que je veux que vous

99
00:05:21,140 --> 00:05:24,280
‫gardiez à l'esprit, c'est que dans les coulisses, l'utilisation

100
00:05:24,280 --> 00:05:26,300
‫de populate créera toujours une

101
00:05:26,300 --> 00:05:29,290
‫nouvelle requête, et cela pourrait donc affecter vos performances.

102
00:05:29,290 --> 00:05:31,985
‫D'accord, bien sûr, si vous ne le faites

103
00:05:31,985 --> 00:05:35,430
‫qu'une ou deux fois et dans une sorte de petite application, alors ce

104
00:05:35,430 --> 00:05:38,170
‫petit coup sur les performances n'est pas grave du tout.

105
00:05:38,170 --> 00:05:40,944
‫Mais dans une application énorme, avec des

106
00:05:40,944 --> 00:05:43,469
‫tonnes de population partout, cela

107
00:05:43,469 --> 00:05:46,450
‫pourrait effectivement avoir un effet, d'accord ?

108
00:05:46,450 --> 00:05:47,960
‫Alors gardez cela à l'esprit.

109
00:05:47,960 --> 00:05:51,430
‫D'accord, et c'est vraiment logique, car comment Mongoose

110
00:05:51,430 --> 00:05:54,700
‫pourrait-il autrement obtenir des données sur les visites

111
00:05:54,700 --> 00:05:57,700
‫et les utilisateurs en même temps.

112
00:05:57,700 --> 00:06:01,050
‫Il doit créer une nouvelle requête essentiellement

113
00:06:01,050 --> 00:06:03,960
‫pour pouvoir créer cette connexion.

114
00:06:03,960 --> 00:06:06,060
‫D'accord et maintenant juste pour finir, souvenons-nous de

115
00:06:06,060 --> 00:06:07,763
‫ce que je vous ai

116
00:06:07,763 --> 00:06:11,610
‫montré que cela n'a pas fonctionné en fait lorsque nous avons eu toutes les tournées.

117
00:06:11,610 --> 00:06:15,460
‫Alors, rappelez-vous que dans cette situation, nous obtenons toujours

118
00:06:15,460 --> 00:06:18,620
‫simplement les identifiants des guides touristiques et non

119
00:06:18,620 --> 00:06:20,850
‫les données utilisateur référencées.

120
00:06:20,850 --> 00:06:24,050
‫D'accord, et donc une solution serait essentiellement de

121
00:06:24,050 --> 00:06:27,956
‫copier ce code ici, donc cette fonction de remplissage, également ici

122
00:06:27,956 --> 00:06:30,950
‫dans ce gestionnaire de route, mais bien

123
00:06:30,950 --> 00:06:34,390
‫sûr, le code dupliqué n'est jamais une bonne idée.

124
00:06:34,390 --> 00:06:35,635
‫Et j'espère que

125
00:06:35,635 --> 00:06:39,640
‫vous connaissez déjà à ce stade une meilleure façon de le faire.

126
00:06:39,640 --> 00:06:42,310
‫Et la réponse à cela est le middleware de requête.

127
00:06:42,310 --> 00:06:46,833
‫D'accord, allons-y rapidement et passons à notre modèle, et je

128
00:06:47,910 --> 00:06:49,620
‫copie ce code

129
00:06:51,731 --> 00:06:55,253
‫ici maintenant et donc, ouais, faisons-le ici.

130
00:06:57,580 --> 00:06:58,413
‫Donc,

131
00:06:59,430 --> 00:07:03,460
‫un pre et ensuite je le ferai comme avant

132
00:07:03,460 --> 00:07:06,640
‫avec une expression régulière, qui fonctionnera ensuite pour

133
00:07:06,640 --> 00:07:09,363
‫tout ce qui commence par find.

134
00:07:11,830 --> 00:07:13,083
‫Donc, juste comme

135
00:07:17,010 --> 00:07:21,500
‫ça, d'accord, et bien sûr, nous le faisons dans un middleware de requête, eh bien

136
00:07:21,500 --> 00:07:23,820
‫parce que c'est le genre de middleware qui

137
00:07:23,820 --> 00:07:27,000
‫va s'exécuter à chaque fois qu'il y a une requête.

138
00:07:27,000 --> 00:07:30,540
‫Bon, mettons simplement tous ces pré middlewares ensemble,

139
00:07:32,180 --> 00:07:34,943
‫puis après cela, ayons le post.

140
00:07:37,230 --> 00:07:42,230
‫Très bien, permettez-moi de copier le code que nous avions auparavant et

141
00:07:42,660 --> 00:07:45,410
‫ajoutons-le maintenant, car rappelez-vous que dans

142
00:07:45,410 --> 00:07:47,620
‫le middleware de requête,

143
00:07:47,620 --> 00:07:50,810
‫cela pointe toujours vers la requête actuelle.

144
00:07:50,810 --> 00:07:53,760
‫Et donc maintenant, en gros, toutes

145
00:07:53,760 --> 00:07:56,560
‫les requêtes rempliront automatiquement le champ

146
00:07:56,560 --> 00:07:58,740
‫guides avec l'utilisateur référencé.

147
00:07:58,740 --> 00:08:02,053
‫D'accord, et nous pouvons maintenant nous en débarrasser ici.

148
00:08:05,040 --> 00:08:07,770
‫Et oui, c'est en fait ça.

149
00:08:07,770 --> 00:08:09,720
‫Alors maintenant, nous le faisons ici, au

150
00:08:09,720 --> 00:08:12,040
‫lieu de le faire à deux endroits, dans le contrôleur.

151
00:08:12,040 --> 00:08:15,200
‫Et c'est donc une petite astuce sympa au cas où

152
00:08:15,200 --> 00:08:17,713
‫vous voudriez toujours remplir tous vos documents.

153
00:08:19,130 --> 00:08:20,923
‫Alors, testons-le.

154
00:08:21,940 --> 00:08:23,993
‫Tout d'abord, si cela fonctionne toujours ici.

155
00:08:24,840 --> 00:08:27,553
‫Et en effet, c'est le cas, nous obtenons donc nos deux utilisateurs.

156
00:08:28,530 --> 00:08:32,120
‫Et puis testons-le ici là où cela ne fonctionnait pas

157
00:08:32,120 --> 00:08:36,060
‫auparavant et maintenant c'est le cas, alors voici le résultat de cela.

158
00:08:36,060 --> 00:08:38,790
‫Et maintenant, juste pour nous assurer que

159
00:08:38,790 --> 00:08:43,384
‫cela fonctionne réellement, mettons-le également à jour et ajoutons essentiellement un autre guide touristique.

160
00:08:43,384 --> 00:08:48,320
‫Donc, copions l'identifiant de

161
00:08:49,300 --> 00:08:51,160
‫la

162
00:08:51,160 --> 00:08:55,563
‫visite ici, puis

163
00:08:58,140 --> 00:09:04,360
‫mettons à jour la visite.

164
00:09:04,360 --> 00:09:07,410
‫autre utilisateur.

165
00:09:07,410 --> 00:09:10,960
‫Donc, c'est celui-ci ici, qui n'est en fait pas

166
00:09:10,960 --> 00:09:14,710
‫un guide ni même un administrateur, mais c'est juste pour

167
00:09:14,710 --> 00:09:16,933
‫le test, alors saisissons

168
00:09:19,450 --> 00:09:22,423
‫cet identifiant, puis allons-y et mettons-le ici.

169
00:09:24,090 --> 00:09:28,640
‫Alors, mettons-le à jour, cela fonctionne toujours, et maintenant en

170
00:09:28,640 --> 00:09:31,070
‫fait, même dans cette

171
00:09:31,070 --> 00:09:34,130
‫sortie, nous avons déjà les données remplies.

172
00:09:34,130 --> 00:09:36,410
‫D'accord, parce que dans notre expression régulière, rappelez-vous

173
00:09:36,410 --> 00:09:38,300
‫que nous avons utilisé find.

174
00:09:38,300 --> 00:09:42,450
‫Et donc, cette mise à jour ici est implémentée à l'aide de find

175
00:09:42,450 --> 00:09:45,465
‫by id et update, et elle commence donc également

176
00:09:45,465 --> 00:09:49,110
‫par find et donc le middleware de requête que nous étions

177
00:09:49,110 --> 00:09:51,690
‫auparavant s'applique également à cette fonction.

178
00:09:51,690 --> 00:09:55,440
‫D'accord, c'est ainsi que fonctionne le remplissage.

179
00:09:55,440 --> 00:09:58,640
‫Bon, encore une fois, un outil extrêmement important dans

180
00:09:58,640 --> 00:10:01,200
‫votre boîte à outils Mongoose, d'accord.

181
00:10:01,200 --> 00:10:02,910
‫Et juste pour être

182
00:10:02,910 --> 00:10:05,770
‫sûr, prenons 15 secondes ici pour récapituler.

183
00:10:05,770 --> 00:10:08,700
‫Il s'agit donc d'un processus en deux étapes.

184
00:10:08,700 --> 00:10:12,080
‫Tout d'abord, vous créez une référence à un autre modèle.

185
00:10:12,080 --> 00:10:14,680
‫Et ainsi, avec cela, vous créez efficacement

186
00:10:14,680 --> 00:10:17,410
‫la relation entre ces deux ensembles de données.

187
00:10:17,410 --> 00:10:20,349
‫Ensuite, dans la deuxième étape, vous remplissez

188
00:10:20,349 --> 00:10:23,010
‫ce champ que vous venez de

189
00:10:23,010 --> 00:10:26,920
‫spécifier auparavant, ainsi les guides utilisent la méthode de remplissage.

190
00:10:26,920 --> 00:10:30,350
‫Très bien, très simple, très direct, tout ce dont vous avez

191
00:10:30,350 --> 00:10:32,330
‫besoin est de vraiment comprendre

192
00:10:32,330 --> 00:10:34,620
‫la logique derrière tout cela et

193
00:10:34,620 --> 00:10:37,163
‫vous êtes ensuite prêt à commencer à l'utiliser.

