﻿1
00:00:00,960 --> 00:00:02,940
‫-: Quindi la funzione

2
00:00:02,940 --> 00:00:06,250
‫di filtro che abbiamo implementato in questo momento funziona

3
00:00:06,250 --> 00:00:09,860
‫già alla grande, ma in questo video vogliamo portarla al

4
00:00:09,860 --> 00:00:12,733
‫livello successivo consentendo alcune query ancora più complesse.

5
00:00:14,210 --> 00:00:17,680
‫Quindi in questo momento un utente può filtrare

6
00:00:17,680 --> 00:00:22,430
‫i documenti solo impostando una chiave uguale a un valore, giusto?

7
00:00:22,430 --> 00:00:24,760
‫Ma ora, in realtà vogliamo

8
00:00:24,760 --> 00:00:27,680
‫implementare anche gli operatori maggiore di, maggiore

9
00:00:27,680 --> 00:00:31,733
‫o uguale a, minore di e minore o uguale a.

10
00:00:32,780 --> 00:00:34,510
‫Quindi, invece di essere

11
00:00:34,510 --> 00:00:37,500
‫semplicemente uguale, vogliamo essere effettivamente in grado, ad esempio,

12
00:00:37,500 --> 00:00:40,130
‫di dire la durata maggiore o uguale a

13
00:00:40,130 --> 00:00:42,290
‫cinque, e non solo uguale, va bene?

14
00:00:42,290 --> 00:00:45,310
‫E questo rende tutto un po' più complesso.

15
00:00:45,310 --> 00:00:48,140
‫Ora, prima di scrivere qualsiasi codice, farò

16
00:00:48,140 --> 00:00:50,810
‫effettivamente l'esercizio di scrivere la query

17
00:00:50,810 --> 00:00:53,043
‫come dovrebbe apparire in MongoDB.

18
00:00:55,150 --> 00:00:58,200
‫Quindi come sarebbe effettivamente l'oggetto filtro?

19
00:00:58,200 --> 00:01:00,360
‫E scriviamolo qui come commento, e

20
00:01:00,360 --> 00:01:02,273
‫ancora, solo come esercizio.

21
00:01:03,270 --> 00:01:06,090
‫Quindi l'oggetto assomiglierebbe un po' a

22
00:01:06,090 --> 00:01:09,723
‫questo, quindi difficoltà, inizia con quello, impostato su facile

23
00:01:14,040 --> 00:01:17,030
‫e poi durata; e ora ricorda che

24
00:01:17,030 --> 00:01:21,000
‫quando vogliamo usare un operatore, dobbiamo iniziare un altro oggetto.

25
00:01:21,000 --> 00:01:24,530
‫E poi per l'operatore maggiore o uguale

26
00:01:24,530 --> 00:01:29,530
‫a lo usiamo in questo modo, a cinque, giusto, ricordi?

27
00:01:30,640 --> 00:01:33,050
‫Quindi è così che scriveremmo manualmente

28
00:01:33,050 --> 00:01:36,383
‫l'oggetto filtro per la query che abbiamo appena specificato.

29
00:01:37,340 --> 00:01:40,240
‫Ora torniamo effettivamente a Postman in modo

30
00:01:40,240 --> 00:01:43,860
‫che io possa mostrarti un modo molto standard di

31
00:01:43,860 --> 00:01:47,440
‫scrivere una stringa di query che include questi operatori.

32
00:01:47,440 --> 00:01:50,670
‫E lo facciamo in questo modo, quindi prima del

33
00:01:50,670 --> 00:01:53,150
‫segno di uguale apriamo le parentesi

34
00:01:53,150 --> 00:01:55,880
‫e poi qui dentro scriviamo l'operatore, quindi

35
00:01:55,880 --> 00:01:58,650
‫in questo caso maggiore o uguale, e basta.

36
00:01:58,650 --> 00:02:01,880
‫E quindi sostanzialmente in questo modo, aggiungiamo una terza

37
00:02:01,880 --> 00:02:04,680
‫parte alla coppia chiave-valore, quindi abbiamo

38
00:02:04,680 --> 00:02:07,610
‫la chiave, il valore e ora anche l'operatore.

39
00:02:07,610 --> 00:02:09,930
‫E usiamo di nuovo queste

40
00:02:09,930 --> 00:02:11,923
‫parentesi per specificare l'operatore.

41
00:02:13,060 --> 00:02:15,320
‫Quindi di nuovo, questo è un

42
00:02:15,320 --> 00:02:17,170
‫modo standard e

43
00:02:17,170 --> 00:02:21,150
‫quindi ora andiamo avanti e diamo un'occhiata alla stringa di

44
00:02:21,150 --> 00:02:23,360
‫query che Express ci fornisce

45
00:02:23,360 --> 00:02:25,823
‫e quindi, proprio come prima, registriamo

46
00:02:27,310 --> 00:02:32,310
‫una query reg dot sulla console, registriamo la query reg dot, tutto Giusto.

47
00:02:32,600 --> 00:02:35,530
‫E quindi diamo un'occhiata a come apparirà il

48
00:02:35,530 --> 00:02:37,640
‫nostro oggetto query quando specifichiamo

49
00:02:37,640 --> 00:02:39,940
‫la stringa di query in questo modo.

50
00:02:39,940 --> 00:02:42,040
‫Bene, ora la prima cosa che noti

51
00:02:42,040 --> 00:02:43,640
‫è che riceviamo un

52
00:02:43,640 --> 00:02:45,573
‫errore qui, ma per ora non preoccuparti.

53
00:02:46,570 --> 00:02:50,470
‫Quindi quello che mi interessa qui, è questo oggetto, quindi

54
00:02:50,470 --> 00:02:52,920
‫lasciami andare avanti e copiarlo qui.

55
00:02:55,570 --> 00:02:58,820
‫Va bene, allora cosa noti qui?

56
00:02:58,820 --> 00:03:01,420
‫Bene, quello che vediamo qui è che

57
00:03:01,420 --> 00:03:03,870
‫l'oggetto query sembra quasi identico

58
00:03:03,870 --> 00:03:06,350
‫all'oggetto filtro che abbiamo scritto manualmente, l'unica

59
00:03:06,350 --> 00:03:10,513
‫differenza è che in questo abbiamo il segno dell'operatore MongoDB qui.

60
00:03:11,360 --> 00:03:13,420
‫Quindi questa è davvero l'unica cosa

61
00:03:13,420 --> 00:03:16,210
‫che manca qui davanti al nome di questo operatore.

62
00:03:16,210 --> 00:03:18,620
‫Ok, quindi la soluzione

63
00:03:18,620 --> 00:03:21,780
‫per questo è sostanzialmente sostituire tutti gli operatori

64
00:03:21,780 --> 00:03:24,300
‫come questo con i loro operatori

65
00:03:24,300 --> 00:03:29,030
‫MongoDB corrispondenti, quindi in pratica aggiungendo questo simbolo del dollaro qui, ok.

66
00:03:29,030 --> 00:03:31,270
‫Quindi ora implementiamolo, e infatti lo

67
00:03:31,270 --> 00:03:33,433
‫facciamo da qualche parte qui,

68
00:03:34,810 --> 00:03:36,960
‫aggiungiamo altri commenti qui.

69
00:03:38,700 --> 00:03:42,090
‫Quindi il filtraggio che abbiamo fatto nell'ultima lezione,

70
00:03:42,090 --> 00:03:45,313
‫ora qui aggiungiamo alcuni filtri avanzati, e questo

71
00:03:47,920 --> 00:03:50,903
‫è il codice che scriveremo ora.

72
00:03:52,720 --> 00:03:56,393
‫Ora mettiamo questo codice qui in alto, va bene.

73
00:03:57,290 --> 00:03:59,860
‫Quindi questo codice qui non ci serve davvero,

74
00:03:59,860 --> 00:04:01,160
‫ma voglio comunque

75
00:04:01,160 --> 00:04:03,193
‫tenerlo qui, quindi mettiamolo qui alla fine.

76
00:04:04,960 --> 00:04:08,270
‫E poi solo questo codice qui come riferimento solo per

77
00:04:08,270 --> 00:04:11,210
‫assicurarci di sapere cosa stiamo facendo qui.

78
00:04:11,210 --> 00:04:13,330
‫Va bene, e ora che sappiamo cosa

79
00:04:13,330 --> 00:04:15,230
‫dobbiamo fare qui, in realtà

80
00:04:15,230 --> 00:04:17,400
‫è solo un semplice problema di Javascript.

81
00:04:17,400 --> 00:04:19,420
‫E il modo in cui lo

82
00:04:19,420 --> 00:04:22,710
‫sto risolvendo è questo, quindi prima convertirò l'oggetto in una stringa

83
00:04:25,230 --> 00:04:30,230
‫in modo che la stringa di query sia uguale a JSON dot stringify dell'oggetto query, e quindi

84
00:04:35,600 --> 00:04:38,780
‫ora posso usare quella stringa di query per usare la

85
00:04:38,780 --> 00:04:40,963
‫funzione di sostituzione su di essa .

86
00:04:42,060 --> 00:04:44,530
‫Va bene, quindi quello che voglio sostituire

87
00:04:44,530 --> 00:04:48,330
‫ora è il gte con il simbolo del dollaro gte, e

88
00:04:48,330 --> 00:04:50,403
‫poi anche qualche altro operatore.

89
00:04:51,360 --> 00:04:53,290
‫Quindi quelli che

90
00:04:53,290 --> 00:04:56,113
‫vogliamo sostituire sono maggiore o uguale, maggiore

91
00:04:56,970 --> 00:05:01,010
‫di, minore o uguale e minore di, e ci sono

92
00:05:01,010 --> 00:05:03,620
‫un paio di modi in cui

93
00:05:03,620 --> 00:05:06,193
‫possiamo farlo, ma userò un'espressione regolare.

94
00:05:07,243 --> 00:05:10,340
‫E per me personalmente, le espressioni regolari

95
00:05:10,340 --> 00:05:13,450
‫sono uno dei concetti più difficili in

96
00:05:13,450 --> 00:05:16,210
‫Javascript e in generale nella programmazione.

97
00:05:16,210 --> 00:05:18,270
‫Quindi di solito quando ho bisogno

98
00:05:18,270 --> 00:05:21,538
‫di fare qualcosa del genere, vado semplicemente su Stack Overflow o semplicemente

99
00:05:21,538 --> 00:05:24,180
‫su Google per trovare la soluzione giusta per il

100
00:05:24,180 --> 00:05:26,280
‫problema che sto cercando di risolvere, va bene.

101
00:05:26,280 --> 00:05:28,070
‫E quindi quello che vogliamo

102
00:05:28,070 --> 00:05:31,660
‫fare ora qui è sostanzialmente abbinare una di queste quattro parole e

103
00:05:31,660 --> 00:05:33,900
‫poi sostituirla con le stesse parole ma

104
00:05:33,900 --> 00:05:35,933
‫con il simbolo del dollaro davanti.

105
00:05:36,980 --> 00:05:38,530
‫E così l'espressione

106
00:05:38,530 --> 00:05:42,620
‫regolare per trovare una di queste quattro parole va

107
00:05:42,620 --> 00:05:46,820
‫così; quindi apriamo queste parentesi e poi scriviamo gli operatori,

108
00:05:46,820 --> 00:05:50,517
‫quindi gte o gt o lte o lt.

109
00:05:55,500 --> 00:06:00,500
‫E poi dobbiamo anche aggiungere questo \b prima e dopo, e questo perché

110
00:06:01,140 --> 00:06:04,283
‫vogliamo solo far corrispondere queste parole esatte.

111
00:06:05,220 --> 00:06:08,183
‫Quindi immagina che ci sia una parola che ha

112
00:06:08,183 --> 00:06:10,700
‫lt in essa, quindi ovviamente non vogliamo

113
00:06:10,700 --> 00:06:14,070
‫corrispondere a ciò che vogliamo abbinare solo se è questa

114
00:06:14,070 --> 00:06:16,840
‫parola esatta, senza altre stringhe attorno ad essa.

115
00:06:16,840 --> 00:06:19,170
‫E quindi questa espressione regolare che ho qui

116
00:06:19,170 --> 00:06:21,310
‫se ne occuperà, e in realtà

117
00:06:21,310 --> 00:06:24,670
‫manca un pezzo e questo è questo flag g qui, il

118
00:06:24,670 --> 00:06:27,130
‫che significa che in realtà accadrà più volte.

119
00:06:27,130 --> 00:06:30,270
‫Quindi, se abbiamo due o tre

120
00:06:30,270 --> 00:06:33,880
‫operatori o anche tutti, allora li sostituirà tutti.

121
00:06:33,880 --> 00:06:36,240
‫E senza questa g qui,

122
00:06:36,240 --> 00:06:40,300
‫sostituirebbe solo la prima occorrenza, quindi questa è molto importante.

123
00:06:40,300 --> 00:06:43,460
‫Ora, con cosa vogliamo effettivamente sostituirlo?

124
00:06:43,460 --> 00:06:45,450
‫Bene, il metodo di

125
00:06:45,450 --> 00:06:48,880
‫sostituzione accetta effettivamente un callback che è molto potente e

126
00:06:48,880 --> 00:06:51,100
‫questo callback ha come primo argomento,

127
00:06:51,100 --> 00:06:53,523
‫la parola corrispondente o la stringa corrispondente.

128
00:06:55,060 --> 00:06:58,690
‫Quindi possiamo passare la corrispondenza in quella funzione di callback

129
00:06:58,690 --> 00:07:01,840
‫e ciò che restituiamo da questo callback è la

130
00:07:01,840 --> 00:07:04,690
‫nuova stringa che sostituirà quella vecchia, ok?

131
00:07:04,690 --> 00:07:07,200
‫Quindi facciamo una stringa modello qui, e

132
00:07:07,200 --> 00:07:08,820
‫quindi vogliamo sostituire

133
00:07:08,820 --> 00:07:13,820
‫la corrispondenza con la corrispondenza del simbolo del dollaro, ok, quindi questa è

134
00:07:14,190 --> 00:07:17,060
‫qui la parte della sintassi della stringa modello.

135
00:07:17,060 --> 00:07:19,860
‫Quindi questa è questa partita, e poi vogliamo mettere

136
00:07:19,860 --> 00:07:22,613
‫il simbolo del dollaro davanti a quella.

137
00:07:25,690 --> 00:07:28,570
‫E ora, solo per essere

138
00:07:29,970 --> 00:07:34,250
‫sicuri, accediamo effettivamente alla console e richiediamo effettivamente l'oggetto,

139
00:07:34,250 --> 00:07:38,303
‫quindi il punto JSON analizza la stringa di query.

140
00:07:40,210 --> 00:07:43,200
‫Va bene, lasciami andare avanti e chiarire questo qui in modo che

141
00:07:43,200 --> 00:07:45,603
‫tu possa vedere i risultati un po' meglio.

142
00:07:48,541 --> 00:07:50,050
‫Quindi, di nuovo, otteniamo questo

143
00:07:50,050 --> 00:07:52,240
‫errore qui e questo è ovviamente perché MongoDB

144
00:07:52,240 --> 00:07:54,330
‫non può davvero usare la stringa di

145
00:07:54,330 --> 00:07:56,933
‫query o l'oggetto query come lo abbiamo in questo momento.

146
00:07:58,980 --> 00:08:01,300
‫E qui abbiamo i due

147
00:08:01,300 --> 00:08:04,610
‫risultati e in realtà vedi che il nostro risultato

148
00:08:04,610 --> 00:08:07,150
‫è esattamente lo stesso di prima e

149
00:08:07,150 --> 00:08:09,670
‫quindi qualcosa qui chiaramente non funziona.

150
00:08:09,670 --> 00:08:12,240
‫Quindi cerchiamo di capire di cosa si tratta.

151
00:08:12,240 --> 00:08:15,940
‫E qui l'espressione regolare sembra a posto, tutto sembra a

152
00:08:15,940 --> 00:08:18,707
‫posto qui, ah, ma va bene, il problema

153
00:08:18,707 --> 00:08:22,470
‫è che la sto sostituendo nella stringa ma poi non la

154
00:08:22,470 --> 00:08:24,320
‫salvo da nessuna parte.

155
00:08:24,320 --> 00:08:28,030
‫E quindi in realtà vogliamo salvarlo nella stringa di query.

156
00:08:28,030 --> 00:08:30,580
‫Quindi cambiamo questo qui in

157
00:08:30,580 --> 00:08:33,940
‫un let, in modo che possa quindi

158
00:08:33,940 --> 00:08:38,940
‫mutare i dati e quindi diciamo, stringa di query, oh scusa.

159
00:08:39,640 --> 00:08:44,640
‫Quindi, la stringa di query è uguale alla stringa di query sostituita,

160
00:08:45,530 --> 00:08:49,750
‫proprio come prima, quindi quello che stavo dimenticando è semplicemente salvare

161
00:08:49,750 --> 00:08:52,693
‫effettivamente il risultato qui nella variabile.

162
00:08:54,320 --> 00:08:58,670
‫Proviamo di nuovo, e ora funziona.

163
00:08:58,670 --> 00:09:01,170
‫Quindi ora abbiamo il

164
00:09:01,170 --> 00:09:04,400
‫simbolo del dollaro davanti all'operatore, fantastico.

165
00:09:04,400 --> 00:09:07,840
‫Ok, quindi funziona, liberiamoci di questi commenti qui e ora finalmente,

166
00:09:07,840 --> 00:09:10,430
‫tutto ciò che dobbiamo fare è in

167
00:09:10,430 --> 00:09:13,703
‫realtà qui non usare l'oggetto query ma usare solo questo.

168
00:09:16,730 --> 00:09:19,290
‫Quindi JSON. analizzare la stringa di

169
00:09:19,290 --> 00:09:22,020
‫query e, naturalmente, se non si dispone di alcun operatore

170
00:09:22,020 --> 00:09:23,770
‫nella stringa di query, tutto funzionerà correttamente.

171
00:09:23,770 --> 00:09:27,920
‫Semplicemente non troverà nessuno di questi quattro operatori lì, ma non è

172
00:09:27,920 --> 00:09:29,670
‫un problema, semplicemente non sostituirà

173
00:09:30,539 --> 00:09:31,403
‫nulla.

174
00:09:32,681 --> 00:09:36,290
‫Inoltre, andiamo avanti e proviamo questo e ci vuole un

175
00:09:37,690 --> 00:09:39,800
‫po' di tempo, ma in

176
00:09:39,800 --> 00:09:41,750
‫effetti è tornato con

177
00:09:41,750 --> 00:09:45,020
‫tre risultati, quindi ora controlliamo se sono effettivamente corretti.

178
00:09:45,020 --> 00:09:47,860
‫Quindi la durata dovrebbe essere maggiore o uguale

179
00:09:47,860 --> 00:09:50,570
‫a cinque, e questa qui è la durata

180
00:09:50,570 --> 00:09:52,730
‫di cinque, questa ha una durata

181
00:09:52,730 --> 00:09:54,880
‫di nove, che è maggiore o

182
00:09:54,880 --> 00:09:58,730
‫uguale a cinque, e quindi funziona davvero, la difficoltà è ancora

183
00:09:58,730 --> 00:10:02,460
‫facile e quindi cosa significa che il codice che abbiamo

184
00:10:02,460 --> 00:10:04,603
‫appena implementato funziona bene.

185
00:10:05,480 --> 00:10:08,750
‫Perfetto, ora aggiungiamo solo per il gusto di

186
00:10:08,750 --> 00:10:11,380
‫farlo un altro parametro lassù, quindi filtriamo

187
00:10:11,380 --> 00:10:13,860
‫anche per il prezzo ora.

188
00:10:13,860 --> 00:10:18,860
‫Quindi questo ne ha quasi 2000, poi 1100, questo ne ha 300.

189
00:10:19,350 --> 00:10:23,070
‫Quindi ora filtriamo per prezzi inferiori a mille

190
00:10:23,070 --> 00:10:25,150
‫o inferiori a millecinquecento.

191
00:10:28,100 --> 00:10:32,920
‫E il prezzo, e ora di nuovo le nostre

192
00:10:32,920 --> 00:10:37,920
‫parentesi, e usiamo meno di 1500, e va bene, invialo.

193
00:10:41,320 --> 00:10:46,240
‫E cosa otteniamo qui, oh, ora abbiamo solo due risultati.

194
00:10:46,240 --> 00:10:51,240
‫E in effetti, i prezzi qui, 397, e qui 1197, e quindi

195
00:10:51,420 --> 00:10:54,930
‫quello prima era 2000, ora è sparito.

196
00:10:54,930 --> 00:10:57,470
‫Quindi abbiamo filtrato anche quello

197
00:10:57,470 --> 00:11:00,670
‫usando di nuovo l'operatore che abbiamo appena implementato.

198
00:11:00,670 --> 00:11:03,030
‫E ora potremmo filtrare per

199
00:11:03,030 --> 00:11:07,060
‫tutti i tipi di cose qui, ma hai capito, e quindi

200
00:11:07,060 --> 00:11:10,110
‫sì, abbiamo implementato il nostro tipo di filtro

201
00:11:10,110 --> 00:11:14,500
‫avanzato qui a questo punto, che ora accetta anche questi quattro operatori.

202
00:11:14,500 --> 00:11:16,600
‫Ora, nel mondo reale,

203
00:11:16,600 --> 00:11:19,340
‫dovremmo scrivere della documentazione, fondamentalmente per consentire

204
00:11:19,340 --> 00:11:22,040
‫all'utente di sapere quali tipi di

205
00:11:22,040 --> 00:11:25,100
‫operazioni possono eseguire sulla nostra API, giusto?

206
00:11:25,100 --> 00:11:28,800
‫Quindi, di nuovo, idealmente dovremmo documentare completamente la nostra API,

207
00:11:28,800 --> 00:11:31,660
‫specificando quali richieste possono essere fatte usando quali

208
00:11:31,660 --> 00:11:34,360
‫metodi htp, e poi anche che tipo

209
00:11:34,360 --> 00:11:36,490
‫di filtraggio o ordinamento, o tutte

210
00:11:36,490 --> 00:11:39,580
‫queste funzionalità, quali di esse sono disponibili e come

211
00:11:39,580 --> 00:11:41,570
‫possono usarle, giusto ?

212
00:11:41,570 --> 00:11:44,400
‫Ora, nel nostro caso ovviamente non lo faremo,

213
00:11:44,400 --> 00:11:47,000
‫ma ancora una volta, non dimenticare che

214
00:11:47,000 --> 00:11:50,160
‫se stai davvero implementando un'API che verrà utilizzata da

215
00:11:50,160 --> 00:11:53,600
‫qualcun altro, allora devi davvero fare questo tipo di documentazione.

216
00:11:53,600 --> 00:11:56,780
‫Ma comunque, passiamo ora al nostro prossimo video

217
00:11:56,780 --> 00:11:59,203
‫e implementiamo una funzionalità di ordinamento.

