﻿1
00:00:00,960 --> 00:00:02,940
‫- : Ainsi, la fonction

2
00:00:02,940 --> 00:00:06,250
‫de filtrage que nous avons implémentée en ce moment fonctionne

3
00:00:06,250 --> 00:00:09,860
‫déjà très bien, mais dans cette vidéo, nous voulons passer au

4
00:00:09,860 --> 00:00:12,733
‫niveau supérieur en autorisant des requêtes encore plus complexes.

5
00:00:14,210 --> 00:00:17,680
‫Donc, pour le moment, un utilisateur ne peut filtrer

6
00:00:17,680 --> 00:00:22,430
‫les documents qu'en définissant une clé égale à une valeur, n'est-ce pas ?

7
00:00:22,430 --> 00:00:24,760
‫Mais maintenant, nous voulons

8
00:00:24,760 --> 00:00:27,680
‫également implémenter les opérateurs supérieur à, supérieur

9
00:00:27,680 --> 00:00:31,733
‫ou égal à, inférieur à et inférieur ou égal à.

10
00:00:32,780 --> 00:00:34,510
‫Donc, au lieu d'avoir

11
00:00:34,510 --> 00:00:37,500
‫simplement l'égalité, nous voulons réellement pouvoir, par exemple, dire

12
00:00:37,500 --> 00:00:40,130
‫une durée supérieure ou égale à cinq,

13
00:00:40,130 --> 00:00:42,290
‫et pas seulement égale, d'accord ?

14
00:00:42,290 --> 00:00:45,310
‫Et donc cela rend tout un peu plus complexe.

15
00:00:45,310 --> 00:00:48,140
‫Maintenant, avant d'écrire du code, je vais

16
00:00:48,140 --> 00:00:50,810
‫faire l'exercice d'écrire la requête à quoi

17
00:00:50,810 --> 00:00:53,043
‫elle devrait ressembler dans MongoDB.

18
00:00:55,150 --> 00:00:58,200
‫Alors, à quoi ressemblerait réellement l'objet filtre ?

19
00:00:58,200 --> 00:01:00,360
‫Et écrivons-le ici comme un commentaire, et

20
00:01:00,360 --> 00:01:02,273
‫encore, juste comme un exercice.

21
00:01:03,270 --> 00:01:06,090
‫Donc l'objet ressemblerait un peu à

22
00:01:06,090 --> 00:01:09,723
‫ceci, donc difficulté, commencez par celui-là, réglé sur facile,

23
00:01:14,040 --> 00:01:17,030
‫puis durée; et souvenez-vous maintenant que lorsque nous

24
00:01:17,030 --> 00:01:21,000
‫voulons utiliser un opérateur, nous devons démarrer un autre objet.

25
00:01:21,000 --> 00:01:24,530
‫Et puis pour l'opérateur supérieur ou égal à nous

26
00:01:24,530 --> 00:01:29,530
‫l'utilisons comme ceci, à cinq, n'est-ce pas, tu te souviens de ça ?

27
00:01:30,640 --> 00:01:33,050
‫C'est ainsi que nous écririons manuellement l'objet

28
00:01:33,050 --> 00:01:36,383
‫de filtre pour la requête que nous venons de spécifier.

29
00:01:37,340 --> 00:01:40,240
‫Revenons maintenant à Postman pour que

30
00:01:40,240 --> 00:01:43,860
‫je puisse vous montrer une manière très standard

31
00:01:43,860 --> 00:01:47,440
‫d'écrire une chaîne de requête comprenant ces opérateurs.

32
00:01:47,440 --> 00:01:50,670
‫Et nous le faisons comme ceci, donc avant le

33
00:01:50,670 --> 00:01:53,150
‫signe égal, nous ouvrons les crochets,

34
00:01:53,150 --> 00:01:55,880
‫puis ici nous écrivons l'opérateur, donc dans

35
00:01:55,880 --> 00:01:58,650
‫ce cas supérieur ou égal, et c'est tout.

36
00:01:58,650 --> 00:02:01,880
‫Et donc fondamentalement comme ça, nous ajoutons une troisième partie

37
00:02:01,880 --> 00:02:04,680
‫à la paire clé-valeur, nous avons donc

38
00:02:04,680 --> 00:02:07,610
‫la clé, la valeur, et maintenant aussi l'opérateur.

39
00:02:07,610 --> 00:02:09,930
‫Et nous utilisons à nouveau ces

40
00:02:09,930 --> 00:02:11,923
‫crochets afin de spécifier l'opérateur.

41
00:02:13,060 --> 00:02:15,320
‫Encore une fois, c'est une

42
00:02:15,320 --> 00:02:17,170
‫méthode standard et

43
00:02:17,170 --> 00:02:21,150
‫allons maintenant de l'avant et examinons la chaîne de requête

44
00:02:21,150 --> 00:02:23,360
‫qu'Express nous donne et comme

45
00:02:23,360 --> 00:02:25,823
‫avant, enregistrons en fait une requête

46
00:02:27,310 --> 00:02:32,310
‫reg dot sur la console, enregistrons une requête reg dot, tout droit.

47
00:02:32,600 --> 00:02:35,530
‫Et donc regardons à quoi ressemblera notre objet

48
00:02:35,530 --> 00:02:37,640
‫de requête lorsque nous spécifions

49
00:02:37,640 --> 00:02:39,940
‫la chaîne de requête comme ceci.

50
00:02:39,940 --> 00:02:42,040
‫Très bien, maintenant la première chose que vous remarquez

51
00:02:42,040 --> 00:02:43,640
‫est que nous obtenons une erreur

52
00:02:43,640 --> 00:02:45,573
‫ici, mais ne vous inquiétez pas pour le moment.

53
00:02:46,570 --> 00:02:50,470
‫Donc ce qui m'intéresse ici, c'est cet objet, et donc laissez-moi aller

54
00:02:50,470 --> 00:02:52,920
‫de l'avant et le copier ici.

55
00:02:55,570 --> 00:02:58,820
‫D'accord, alors qu'est-ce que vous remarquez ici ?

56
00:02:58,820 --> 00:03:01,420
‫Eh bien, ce que nous voyons ici, c'est que

57
00:03:01,420 --> 00:03:03,870
‫l'objet de requête semble presque identique à

58
00:03:03,870 --> 00:03:06,350
‫l'objet de filtre que nous avons écrit manuellement, la

59
00:03:06,350 --> 00:03:10,513
‫seule différence est que dans celui-ci, nous avons le signe de l'opérateur MongoDB ici.

60
00:03:11,360 --> 00:03:13,420
‫C'est donc vraiment la seule

61
00:03:13,420 --> 00:03:16,210
‫chose qui manque ici devant ce nom d'opérateur.

62
00:03:16,210 --> 00:03:18,620
‫D'accord, et donc la solution

63
00:03:18,620 --> 00:03:21,780
‫pour cela est de remplacer essentiellement tous les

64
00:03:21,780 --> 00:03:24,300
‫opérateurs comme celui-ci par leurs opérateurs

65
00:03:24,300 --> 00:03:29,030
‫MongoDB correspondants, donc en gros, en ajoutant ce signe dollar ici, d'accord.

66
00:03:29,030 --> 00:03:31,270
‫Implémentons maintenant cela, et en fait nous

67
00:03:31,270 --> 00:03:33,433
‫le faisons quelque part ici, ajoutons en

68
00:03:34,810 --> 00:03:36,960
‫fait quelques commentaires supplémentaires ici.

69
00:03:38,700 --> 00:03:42,090
‫Donc le filtrage que nous avons fait dans la dernière

70
00:03:42,090 --> 00:03:45,313
‫leçon, maintenant ici, ajoutons un filtrage avancé, et c'est

71
00:03:47,920 --> 00:03:50,903
‫donc le code que nous allons écrire maintenant.

72
00:03:52,720 --> 00:03:56,393
‫Maintenant, mettons ce code ici tout en haut, d'accord.

73
00:03:57,290 --> 00:03:59,860
‫Ensuite, nous n'avons pas vraiment besoin de ce code ici, mais

74
00:03:59,860 --> 00:04:01,160
‫je veux toujours le garder

75
00:04:01,160 --> 00:04:03,193
‫ici, alors mettons-le juste ici à la fin.

76
00:04:04,960 --> 00:04:08,270
‫Et puis juste ce code ici comme référence juste pour s'assurer

77
00:04:08,270 --> 00:04:11,210
‫que nous savons ce que nous faisons ici.

78
00:04:11,210 --> 00:04:13,330
‫Très bien, et maintenant que nous savons ce

79
00:04:13,330 --> 00:04:15,230
‫que nous devons faire ici, il

80
00:04:15,230 --> 00:04:17,400
‫ne s'agit en fait que d'un simple problème Javascript.

81
00:04:17,400 --> 00:04:19,420
‫Et la façon dont je le

82
00:04:19,420 --> 00:04:22,710
‫résous est la suivante, donc je vais d'abord convertir l'objet en une

83
00:04:25,230 --> 00:04:30,230
‫chaîne de sorte que la chaîne de requête soit égale à JSON dot stringify de l'objet de requête,

84
00:04:35,600 --> 00:04:38,780
‫et donc maintenant je peux utiliser cette chaîne de requête pour

85
00:04:38,780 --> 00:04:40,963
‫utiliser la fonction de remplacement dessus .

86
00:04:42,060 --> 00:04:44,530
‫Très bien, et donc ce que je

87
00:04:44,530 --> 00:04:48,330
‫veux remplacer maintenant, c'est le gte avec le signe dollar gte,

88
00:04:48,330 --> 00:04:50,403
‫puis aussi un autre opérateur.

89
00:04:51,360 --> 00:04:53,290
‫Ainsi, ceux que

90
00:04:53,290 --> 00:04:56,113
‫nous voulons remplacer sont supérieurs ou égaux,

91
00:04:56,970 --> 00:05:01,010
‫supérieurs, inférieurs ou égaux et inférieurs à, et nous pouvons

92
00:05:01,010 --> 00:05:03,620
‫le faire de plusieurs manières, mais

93
00:05:03,620 --> 00:05:06,193
‫je vais utiliser une expression régulière.

94
00:05:07,243 --> 00:05:10,340
‫Et pour moi personnellement, les expressions régulières

95
00:05:10,340 --> 00:05:13,450
‫sont l'un des concepts les plus difficiles en

96
00:05:13,450 --> 00:05:16,210
‫Javascript et en général en programmation.

97
00:05:16,210 --> 00:05:18,270
‫Donc, généralement, lorsque j'ai besoin de

98
00:05:18,270 --> 00:05:21,538
‫faire quelque chose comme ça, je vais simplement sur Stack Overflow

99
00:05:21,538 --> 00:05:24,180
‫ou simplement sur Google pour trouver la bonne solution

100
00:05:24,180 --> 00:05:26,280
‫au problème que j'essaie de résoudre, d'accord.

101
00:05:26,280 --> 00:05:28,070
‫Et donc ce que nous

102
00:05:28,070 --> 00:05:31,660
‫voulons faire maintenant ici est de faire correspondre l'un de ces quatre

103
00:05:31,660 --> 00:05:33,900
‫mots, puis de le remplacer par les mêmes

104
00:05:33,900 --> 00:05:35,933
‫mots mais avec le signe dollar devant.

105
00:05:36,980 --> 00:05:38,530
‫Et donc l'expression

106
00:05:38,530 --> 00:05:42,620
‫régulière pour trouver l'un de ces quatre mots va comme

107
00:05:42,620 --> 00:05:46,820
‫ceci; donc nous ouvrons ces parenthèses puis nous écrivons les

108
00:05:46,820 --> 00:05:50,517
‫opérateurs, donc gte ou gt ou lte ou lt.

109
00:05:55,500 --> 00:06:00,500
‫Et puis nous devons également ajouter ce \b avant et après, et c'est parce que

110
00:06:01,140 --> 00:06:04,283
‫nous voulons seulement faire correspondre ces mots exacts.

111
00:06:05,220 --> 00:06:08,183
‫Imaginez donc qu'il y ait un mot qui contient le mot,

112
00:06:08,183 --> 00:06:10,700
‫alors nous ne voulons bien sûr pas faire

113
00:06:10,700 --> 00:06:14,070
‫correspondre ce que nous voulons seulement faire correspondre s'il s'agit de ce

114
00:06:14,070 --> 00:06:16,840
‫mot exact, sans aucune autre chaîne autour de lui.

115
00:06:16,840 --> 00:06:19,170
‫Et donc cette expression régulière que j'ai ici

116
00:06:19,170 --> 00:06:21,310
‫s'occupera de cela, et en fait,

117
00:06:21,310 --> 00:06:24,670
‫il manque une pièce et c'est ce drapeau g ici, ce

118
00:06:24,670 --> 00:06:27,130
‫qui signifie que cela se produira plusieurs fois.

119
00:06:27,130 --> 00:06:30,270
‫Donc, si nous avons deux ou trois

120
00:06:30,270 --> 00:06:33,880
‫opérateurs ou même tous, alors il les remplacera tous.

121
00:06:33,880 --> 00:06:36,240
‫Et sans ce g ici, il

122
00:06:36,240 --> 00:06:40,300
‫ne remplacerait que la première occurrence, donc celle-ci est très importante.

123
00:06:40,300 --> 00:06:43,460
‫Maintenant, par quoi voulons-nous réellement le remplacer?

124
00:06:43,460 --> 00:06:45,450
‫Eh bien, la méthode replace

125
00:06:45,450 --> 00:06:48,880
‫accepte en fait un rappel qui est très puissant, et

126
00:06:48,880 --> 00:06:51,100
‫ce rappel a comme premier argument,

127
00:06:51,100 --> 00:06:53,523
‫le mot correspondant ou la chaîne correspondante.

128
00:06:55,060 --> 00:06:58,690
‫Nous pouvons donc passer une correspondance dans cette fonction de rappel

129
00:06:58,690 --> 00:07:01,840
‫et ce que nous retournons de ce rappel est

130
00:07:01,840 --> 00:07:04,690
‫la nouvelle chaîne qui remplacera l'ancienne, d'accord ?

131
00:07:04,690 --> 00:07:07,200
‫Faisons donc une chaîne de modèle ici,

132
00:07:07,200 --> 00:07:08,820
‫et nous voulons donc

133
00:07:08,820 --> 00:07:13,820
‫remplacer la correspondance par une correspondance de signe dollar, d'accord, c'est donc ici la partie

134
00:07:14,190 --> 00:07:17,060
‫de la syntaxe de la chaîne de modèle.

135
00:07:17,060 --> 00:07:19,860
‫Voici donc ce match, et ensuite nous voulons

136
00:07:19,860 --> 00:07:22,613
‫mettre le signe dollar devant cela.

137
00:07:25,690 --> 00:07:28,570
‫Et maintenant, juste pour être

138
00:07:29,970 --> 00:07:34,250
‫sûr, enregistrons-le dans la console et voulons réellement récupérer

139
00:07:34,250 --> 00:07:38,303
‫l'objet, donc JSON n'analyse pas la chaîne de requête.

140
00:07:40,210 --> 00:07:43,200
‫Très bien, permettez-moi d'aller de l'avant et d'éclaircir ceci ici afin que

141
00:07:43,200 --> 00:07:45,603
‫vous puissiez voir un peu mieux les résultats.

142
00:07:48,541 --> 00:07:50,050
‫Encore une fois, nous obtenons

143
00:07:50,050 --> 00:07:52,240
‫cette erreur ici et c'est bien sûr parce que

144
00:07:52,240 --> 00:07:54,330
‫MongoDB ne peut pas vraiment utiliser la chaîne

145
00:07:54,330 --> 00:07:56,933
‫de requête ou l'objet de requête comme nous l'avons actuellement.

146
00:07:58,980 --> 00:08:01,300
‫Et ici, nous avons les deux

147
00:08:01,300 --> 00:08:04,610
‫résultats et vous voyez en fait que notre résultat

148
00:08:04,610 --> 00:08:07,150
‫est exactement le même qu'avant et donc

149
00:08:07,150 --> 00:08:09,670
‫quelque chose ici ne fonctionne clairement pas.

150
00:08:09,670 --> 00:08:12,240
‫Essayons donc de comprendre ce que c'est.

151
00:08:12,240 --> 00:08:15,940
‫Et ici, l'expression régulière a l'air bien, tout semble bien

152
00:08:15,940 --> 00:08:18,707
‫ici, ah, mais d'accord, le problème est que

153
00:08:18,707 --> 00:08:22,470
‫je la remplace dans la chaîne mais que je ne

154
00:08:22,470 --> 00:08:24,320
‫la sauvegarde nulle part.

155
00:08:24,320 --> 00:08:28,030
‫Et donc en fait, nous voulons l'enregistrer dans la chaîne de requête.

156
00:08:28,030 --> 00:08:30,580
‫Alors changeons cela ici

157
00:08:30,580 --> 00:08:33,940
‫en let, afin qu'il puisse ensuite

158
00:08:33,940 --> 00:08:38,940
‫muter les données et disons, chaîne de requête, oh désolé.

159
00:08:39,640 --> 00:08:44,640
‫Ainsi, la chaîne de requête est égale à la chaîne de requête

160
00:08:45,530 --> 00:08:49,750
‫remplacée, comme avant, donc ce que j'oubliais, c'est simplement de sauvegarder

161
00:08:49,750 --> 00:08:52,693
‫le résultat ici dans la variable.

162
00:08:54,320 --> 00:08:58,670
‫Essayons à nouveau, et maintenant ça marche.

163
00:08:58,670 --> 00:09:01,170
‫Alors maintenant, nous avons

164
00:09:01,170 --> 00:09:04,400
‫le signe dollar devant l'opérateur, super.

165
00:09:04,400 --> 00:09:07,840
‫Bon, ça marche, débarrassons-nous de ces commentaires ici et maintenant enfin, tout

166
00:09:07,840 --> 00:09:10,430
‫ce que nous avons à faire est de

167
00:09:10,430 --> 00:09:13,703
‫ne pas utiliser ici l'objet de requête mais simplement de l'utiliser.

168
00:09:16,730 --> 00:09:19,290
‫Donc JSON. analyser la chaîne de

169
00:09:19,290 --> 00:09:22,020
‫requête, et bien sûr, si vous n'avez aucun opérateur dans la

170
00:09:22,020 --> 00:09:23,770
‫chaîne de requête, tout fonctionnera très bien.

171
00:09:23,770 --> 00:09:27,920
‫Il n'y trouvera tout simplement aucun de ces quatre opérateurs mais ce n'est pas

172
00:09:27,920 --> 00:09:29,670
‫un problème, il ne remplacera tout

173
00:09:30,539 --> 00:09:31,403
‫simplement rien.

174
00:09:32,681 --> 00:09:36,290
‫Et aussi allons-y et essayons cela et cela prend un

175
00:09:37,690 --> 00:09:39,800
‫peu de temps, mais en fait,

176
00:09:39,800 --> 00:09:41,750
‫il est revenu avec trois

177
00:09:41,750 --> 00:09:45,020
‫résultats, et vérifions donc maintenant s'ils sont réellement corrects.

178
00:09:45,020 --> 00:09:47,860
‫Donc la durée doit être supérieure ou égale

179
00:09:47,860 --> 00:09:50,570
‫à cinq, et celle-ci ici est une durée

180
00:09:50,570 --> 00:09:52,730
‫de cinq, cela a une durée

181
00:09:52,730 --> 00:09:54,880
‫de neuf, qui est supérieure ou

182
00:09:54,880 --> 00:09:58,730
‫égale à cinq, et donc ça marche réellement, la difficulté est toujours

183
00:09:58,730 --> 00:10:02,460
‫facile et alors quoi cela signifie que le code que nous

184
00:10:02,460 --> 00:10:04,603
‫venons d'implémenter fonctionne très bien.

185
00:10:05,480 --> 00:10:08,750
‫Parfait, maintenant, juste pour le plaisir, ajoutons

186
00:10:08,750 --> 00:10:11,380
‫un autre paramètre là-haut, alors filtrons

187
00:10:11,380 --> 00:10:13,860
‫également le prix maintenant.

188
00:10:13,860 --> 00:10:18,860
‫Donc celui-ci en a presque 2000, puis 1100, celui-ci en a 300.

189
00:10:19,350 --> 00:10:23,070
‫Filtrez donc maintenant les prix inférieurs à mille, ou

190
00:10:23,070 --> 00:10:25,150
‫inférieurs à mille cinq cents.

191
00:10:28,100 --> 00:10:32,920
‫Et le prix, et maintenant encore nos brackets,

192
00:10:32,920 --> 00:10:37,920
‫et nous utilisons moins de 1500, et d'accord, envoyez ça.

193
00:10:41,320 --> 00:10:46,240
‫Et qu'obtenons-nous ici, oh, maintenant nous n'avons que deux résultats.

194
00:10:46,240 --> 00:10:51,240
‫Et en effet, les prix ici, 397, et ici 1197, et

195
00:10:51,420 --> 00:10:54,930
‫donc celui d'avant 2000 a maintenant disparu.

196
00:10:54,930 --> 00:10:57,470
‫Nous avons donc filtré celui-ci également

197
00:10:57,470 --> 00:11:00,670
‫en utilisant à nouveau l'opérateur que nous venons d'implémenter.

198
00:11:00,670 --> 00:11:03,030
‫Et nous pourrions maintenant filtrer toutes

199
00:11:03,030 --> 00:11:07,060
‫sortes de choses ici, mais vous comprenez, et donc oui, nous

200
00:11:07,060 --> 00:11:10,110
‫avons mis en œuvre notre type de filtrage

201
00:11:10,110 --> 00:11:14,500
‫avancé ici à ce stade, qui accepte même maintenant ces quatre opérateurs.

202
00:11:14,500 --> 00:11:16,600
‫Maintenant, dans le monde réel, nous

203
00:11:16,600 --> 00:11:19,340
‫devrions alors rédiger de la documentation, essentiellement pour

204
00:11:19,340 --> 00:11:22,040
‫permettre à l'utilisateur de savoir quels types d'opérations

205
00:11:22,040 --> 00:11:25,100
‫il peut effectuer sur notre API, n'est-ce pas ?

206
00:11:25,100 --> 00:11:28,800
‫Donc encore une fois, idéalement, nous documenterions complètement notre API, en spécifiant

207
00:11:28,800 --> 00:11:31,660
‫quelles requêtes peuvent être faites en utilisant quelles méthodes

208
00:11:31,660 --> 00:11:34,360
‫HTTP, et puis aussi quel type de filtrage

209
00:11:34,360 --> 00:11:36,490
‫ou de tri, ou toutes ces

210
00:11:36,490 --> 00:11:39,580
‫fonctionnalités, lesquelles d'entre elles sont disponibles et comment elles

211
00:11:39,580 --> 00:11:41,570
‫peuvent l'utiliser, n'est-ce pas ?

212
00:11:41,570 --> 00:11:44,400
‫Maintenant, dans notre cas, nous ne le ferons bien

213
00:11:44,400 --> 00:11:47,000
‫sûr pas, mais encore une fois, n'oubliez pas

214
00:11:47,000 --> 00:11:50,160
‫que si vous implémentez vraiment une API qui va être utilisée

215
00:11:50,160 --> 00:11:53,600
‫par quelqu'un d'autre, alors vous devez vraiment faire ce genre de documentation.

216
00:11:53,600 --> 00:11:56,780
‫Mais de toute façon, passons maintenant à notre prochaine vidéo

217
00:11:56,780 --> 00:11:59,203
‫et implémentons une fonctionnalité de tri.

