﻿1
00:00:00,960 --> 00:00:02,940
‫-: Então, o recurso

2
00:00:02,940 --> 00:00:06,250
‫de filtro que implementamos agora já funciona muito

3
00:00:06,250 --> 00:00:09,860
‫bem, mas neste vídeo, queremos levá-lo para o próximo

4
00:00:09,860 --> 00:00:12,733
‫nível, permitindo algumas consultas ainda mais complexas.

5
00:00:14,210 --> 00:00:17,680
‫Portanto, agora um usuário só pode filtrar

6
00:00:17,680 --> 00:00:22,430
‫os documentos definindo uma chave igual a um valor, certo?

7
00:00:22,430 --> 00:00:24,760
‫Mas agora, queremos também

8
00:00:24,760 --> 00:00:27,680
‫implementar os operadores maior que, maior ou

9
00:00:27,680 --> 00:00:31,733
‫igual a, menor que e menor ou igual a.

10
00:00:32,780 --> 00:00:34,510
‫Então, em vez de

11
00:00:34,510 --> 00:00:37,500
‫apenas ter igual, queremos realmente ser capazes de, por

12
00:00:37,500 --> 00:00:40,130
‫exemplo, dizer duração maior ou igual a

13
00:00:40,130 --> 00:00:42,290
‫cinco, e não apenas igual, certo?

14
00:00:42,290 --> 00:00:45,310
‫E isso torna tudo um pouco mais complexo.

15
00:00:45,310 --> 00:00:48,140
‫Agora, antes de escrever qualquer código, farei

16
00:00:48,140 --> 00:00:50,810
‫o exercício de escrever a consulta como

17
00:00:50,810 --> 00:00:53,043
‫ela deve ser no MongoDB.

18
00:00:55,150 --> 00:00:58,200
‫Então, qual seria a aparência real do objeto de filtro?

19
00:00:58,200 --> 00:01:00,360
‫E vamos escrever aqui como um comentário,

20
00:01:00,360 --> 00:01:02,273
‫e novamente, apenas como um exercício.

21
00:01:03,270 --> 00:01:06,090
‫O objeto ficaria um pouco

22
00:01:06,090 --> 00:01:09,723
‫assim, dificuldade, comece com aquele, defina como fácil e

23
00:01:14,040 --> 00:01:17,030
‫depois a duração; e agora lembre-se que

24
00:01:17,030 --> 00:01:21,000
‫quando queremos usar um operador, precisamos iniciar outro objeto.

25
00:01:21,000 --> 00:01:24,530
‫E então para o operador maior ou

26
00:01:24,530 --> 00:01:29,530
‫igual a nós usamos assim, para cinco, certo, lembra disso?

27
00:01:30,640 --> 00:01:33,050
‫Portanto, é assim que escreveríamos manualmente o

28
00:01:33,050 --> 00:01:36,383
‫objeto de filtro para a consulta que acabamos de especificar.

29
00:01:37,340 --> 00:01:40,240
‫Agora, na verdade, vamos voltar ao Postman

30
00:01:40,240 --> 00:01:43,860
‫para que eu possa mostrar a você um meio padrão

31
00:01:43,860 --> 00:01:47,440
‫de escrever uma string de consulta incluindo esses operadores.

32
00:01:47,440 --> 00:01:50,670
‫E fazemos assim, então antes do sinal de

33
00:01:50,670 --> 00:01:53,150
‫igual abrimos os colchetes e

34
00:01:53,150 --> 00:01:55,880
‫aqui escrevemos o operador, então neste

35
00:01:55,880 --> 00:01:58,650
‫caso maior ou igual, e pronto.

36
00:01:58,650 --> 00:02:01,880
‫E então, basicamente assim, adicionamos uma terceira parte ao

37
00:02:01,880 --> 00:02:04,680
‫par de valores-chave, então temos a

38
00:02:04,680 --> 00:02:07,610
‫chave, o valor e agora também o operador.

39
00:02:07,610 --> 00:02:09,930
‫E usamos novamente esses colchetes

40
00:02:09,930 --> 00:02:11,923
‫para especificar o operador.

41
00:02:13,060 --> 00:02:15,320
‫Então, novamente, essa é uma forma

42
00:02:15,320 --> 00:02:17,170
‫padrão e vamos

43
00:02:17,170 --> 00:02:21,150
‫agora realmente dar uma olhada na string de consulta que

44
00:02:21,150 --> 00:02:23,360
‫o Express nos fornece e,

45
00:02:23,360 --> 00:02:25,823
‫assim como antes, vamos realmente registrar

46
00:02:27,310 --> 00:02:32,310
‫uma consulta reg dot no console, log reg dot query, tudo direito.

47
00:02:32,600 --> 00:02:35,530
‫E então vamos dar uma olhada como nosso objeto

48
00:02:35,530 --> 00:02:37,640
‫de consulta se parecerá quando

49
00:02:37,640 --> 00:02:39,940
‫especificarmos a string de consulta desta forma.

50
00:02:39,940 --> 00:02:42,040
‫Tudo bem, agora a primeira coisa que você percebe

51
00:02:42,040 --> 00:02:43,640
‫é que obtemos um erro aqui,

52
00:02:43,640 --> 00:02:45,573
‫mas não se preocupe com isso por enquanto.

53
00:02:46,570 --> 00:02:50,470
‫Então, o que estou interessado aqui é este objeto, então deixe-me

54
00:02:50,470 --> 00:02:52,920
‫ir em frente e copiá-lo aqui.

55
00:02:55,570 --> 00:02:58,820
‫Tudo bem, então o que você nota aqui?

56
00:02:58,820 --> 00:03:01,420
‫Bem, o que vemos aqui é que o

57
00:03:01,420 --> 00:03:03,870
‫objeto de consulta parece quase idêntico

58
00:03:03,870 --> 00:03:06,350
‫ao objeto de filtro que escrevemos manualmente,

59
00:03:06,350 --> 00:03:10,513
‫a única diferença é que neste aqui temos o sinal do operador MongoDB.

60
00:03:11,360 --> 00:03:13,420
‫Então, essa é realmente a única

61
00:03:13,420 --> 00:03:16,210
‫coisa que falta aqui na frente do nome do operador.

62
00:03:16,210 --> 00:03:18,620
‫Ok, então a solução

63
00:03:18,620 --> 00:03:21,780
‫para isso é basicamente substituir todos

64
00:03:21,780 --> 00:03:24,300
‫os operadores como esse por

65
00:03:24,300 --> 00:03:29,030
‫seus operadores MongoDB correspondentes, basicamente adicionando este cifrão aqui, ok.

66
00:03:29,030 --> 00:03:31,270
‫Então, agora vamos implementar isso e, de

67
00:03:31,270 --> 00:03:33,433
‫fato, faremos em algum lugar aqui, vamos

68
00:03:34,810 --> 00:03:36,960
‫adicionar mais alguns comentários aqui.

69
00:03:38,700 --> 00:03:42,090
‫Filtrando que fizemos na última aula, agora vamos

70
00:03:42,090 --> 00:03:45,313
‫adicionar alguns filtros avançados, e esse é

71
00:03:47,920 --> 00:03:50,903
‫o código que vamos escrever agora.

72
00:03:52,720 --> 00:03:56,393
‫Agora vamos colocar este código aqui no topo, certo.

73
00:03:57,290 --> 00:03:59,860
‫Então, não precisamos desse código aqui, mas ainda

74
00:03:59,860 --> 00:04:01,160
‫quero mantê-lo aqui,

75
00:04:01,160 --> 00:04:03,193
‫então vamos colocá-lo aqui no final.

76
00:04:04,960 --> 00:04:08,270
‫E então apenas este código aqui como uma referência apenas para ter

77
00:04:08,270 --> 00:04:11,210
‫certeza de que sabemos o que estamos fazendo aqui.

78
00:04:11,210 --> 00:04:13,330
‫Tudo bem, e agora que sabemos o

79
00:04:13,330 --> 00:04:15,230
‫que precisamos fazer aqui, na

80
00:04:15,230 --> 00:04:17,400
‫verdade é apenas um simples problema de Javascript.

81
00:04:17,400 --> 00:04:19,420
‫E a maneira como estou resolvendo

82
00:04:19,420 --> 00:04:22,710
‫é a seguinte, então primeiro vou converter o objeto em uma

83
00:04:25,230 --> 00:04:30,230
‫string de forma que a string de consulta seja igual a stringify ponto JSON do objeto de

84
00:04:35,600 --> 00:04:38,780
‫consulta, e agora posso usar essa string de consulta para

85
00:04:38,780 --> 00:04:40,963
‫usar a função de substituição nela .

86
00:04:42,060 --> 00:04:44,530
‫Tudo bem, então o que eu

87
00:04:44,530 --> 00:04:48,330
‫quero substituir agora é o gte com o cifrão gte

88
00:04:48,330 --> 00:04:50,403
‫e também alguma outra operadora.

89
00:04:51,360 --> 00:04:53,290
‫Portanto, aqueles que

90
00:04:53,290 --> 00:04:56,113
‫queremos substituir são maiores ou iguais,

91
00:04:56,970 --> 00:05:01,010
‫maiores, menores ou iguais e menores, e há algumas

92
00:05:01,010 --> 00:05:03,620
‫maneiras de fazer isso, mas

93
00:05:03,620 --> 00:05:06,193
‫vou usar uma expressão regular.

94
00:05:07,243 --> 00:05:10,340
‫E para mim, pessoalmente, as expressões regulares são

95
00:05:10,340 --> 00:05:13,450
‫um dos conceitos mais difíceis em Javascript e,

96
00:05:13,450 --> 00:05:16,210
‫na verdade, em geral na programação.

97
00:05:16,210 --> 00:05:18,270
‫Então, geralmente, quando preciso fazer

98
00:05:18,270 --> 00:05:21,538
‫algo assim, simplesmente vou para o Stack Overflow ou simplesmente

99
00:05:21,538 --> 00:05:24,180
‫Google para encontrar a solução certa para

100
00:05:24,180 --> 00:05:26,280
‫o problema que estou tentando resolver.

101
00:05:26,280 --> 00:05:28,070
‫E então o que

102
00:05:28,070 --> 00:05:31,660
‫queremos fazer agora é basicamente combinar uma dessas quatro palavras e,

103
00:05:31,660 --> 00:05:33,900
‫em seguida, substituí-la pelas mesmas palavras,

104
00:05:33,900 --> 00:05:35,933
‫mas com o cifrão na frente.

105
00:05:36,980 --> 00:05:38,530
‫E então a

106
00:05:38,530 --> 00:05:42,620
‫expressão regular para encontrar uma dessas quatro palavras é

107
00:05:42,620 --> 00:05:46,820
‫assim; então abrimos esses parênteses e escrevemos os operadores,

108
00:05:46,820 --> 00:05:50,517
‫então gte ou gt ou lte ou lt.

109
00:05:55,500 --> 00:06:00,500
‫E então também precisamos adicionar este \ b antes e depois, e isso

110
00:06:01,140 --> 00:06:04,283
‫porque queremos apenas corresponder essas palavras exatas.

111
00:06:05,220 --> 00:06:08,183
‫Então, imagine que há uma palavra que contém

112
00:06:08,183 --> 00:06:10,700
‫lt, então é claro que não

113
00:06:10,700 --> 00:06:14,070
‫queremos corresponder a que queremos apenas se for esta palavra

114
00:06:14,070 --> 00:06:16,840
‫exata, sem qualquer outra string ao redor dela.

115
00:06:16,840 --> 00:06:19,170
‫E esta expressão regular que tenho aqui

116
00:06:19,170 --> 00:06:21,310
‫cuidará disso e, na verdade,

117
00:06:21,310 --> 00:06:24,670
‫há uma peça faltando e é esse sinalizador g aqui, o

118
00:06:24,670 --> 00:06:27,130
‫que significa que na verdade acontecerá várias vezes.

119
00:06:27,130 --> 00:06:30,270
‫Portanto, se tivermos dois ou três

120
00:06:30,270 --> 00:06:33,880
‫operadores ou mesmo todos eles, ele substituirá todos eles.

121
00:06:33,880 --> 00:06:36,240
‫E sem esse g aqui,

122
00:06:36,240 --> 00:06:40,300
‫ele apenas substituiria a primeira ocorrência, então este é muito importante.

123
00:06:40,300 --> 00:06:43,460
‫Agora, com o que realmente queremos substituí-lo?

124
00:06:43,460 --> 00:06:45,450
‫Bem, o método replace na

125
00:06:45,450 --> 00:06:48,880
‫verdade aceita um retorno de chamada que é muito poderoso, e

126
00:06:48,880 --> 00:06:51,100
‫esse retorno de chamada tem como primeiro

127
00:06:51,100 --> 00:06:53,523
‫argumento a palavra correspondida ou a string correspondida.

128
00:06:55,060 --> 00:06:58,690
‫Portanto, podemos passar a correspondência para essa função de retorno de

129
00:06:58,690 --> 00:07:01,840
‫chamada e o que retornamos desse retorno de chamada é

130
00:07:01,840 --> 00:07:04,690
‫a nova string que substituirá a antiga, certo?

131
00:07:04,690 --> 00:07:07,200
‫Então, vamos fazer uma string de modelo

132
00:07:07,200 --> 00:07:08,820
‫aqui, e queremos

133
00:07:08,820 --> 00:07:13,820
‫substituir a correspondência por uma correspondência de cifrão, ok, esta é aqui a

134
00:07:14,190 --> 00:07:17,060
‫parte da sintaxe da string de modelo.

135
00:07:17,060 --> 00:07:19,860
‫Então, esta aqui é essa correspondência, e queremos

136
00:07:19,860 --> 00:07:22,613
‫colocar o cifrão na frente disso.

137
00:07:25,690 --> 00:07:28,570
‫E agora, apenas para ter certeza,

138
00:07:29,970 --> 00:07:34,250
‫vamos realmente registrá-lo no console e realmente querer o objeto de

139
00:07:34,250 --> 00:07:38,303
‫volta, então o ponto JSON analisa a string de consulta.

140
00:07:40,210 --> 00:07:43,200
‫Tudo bem, deixe-me prosseguir e limpar isso aqui para que

141
00:07:43,200 --> 00:07:45,603
‫você possa ver os resultados um pouco melhor.

142
00:07:48,541 --> 00:07:50,050
‫Então, novamente, recebemos esse erro

143
00:07:50,050 --> 00:07:52,240
‫aqui e isso é claro porque o MongoDB

144
00:07:52,240 --> 00:07:54,330
‫não pode realmente usar a string de

145
00:07:54,330 --> 00:07:56,933
‫consulta ou o objeto de consulta como o temos agora.

146
00:07:58,980 --> 00:08:01,300
‫E aqui temos os dois

147
00:08:01,300 --> 00:08:04,610
‫resultados e você pode ver que nosso resultado é

148
00:08:04,610 --> 00:08:07,150
‫exatamente o mesmo de antes e,

149
00:08:07,150 --> 00:08:09,670
‫portanto, algo claramente não está funcionando.

150
00:08:09,670 --> 00:08:12,240
‫Então, vamos tentar descobrir o que é.

151
00:08:12,240 --> 00:08:15,940
‫E aqui a expressão regular parece bem, tudo parece bem

152
00:08:15,940 --> 00:08:18,707
‫aqui, ah, mas tudo bem, o problema

153
00:08:18,707 --> 00:08:22,470
‫é que estou substituindo-a na string, mas não a estou

154
00:08:22,470 --> 00:08:24,320
‫salvando em lugar nenhum.

155
00:08:24,320 --> 00:08:28,030
‫E então, na verdade, queremos salvá-lo de volta na string de consulta.

156
00:08:28,030 --> 00:08:30,580
‫Então, vamos mudar isso

157
00:08:30,580 --> 00:08:33,940
‫aqui para let, para que ele

158
00:08:33,940 --> 00:08:38,940
‫possa alterar os dados e, digamos, string de consulta, desculpe.

159
00:08:39,640 --> 00:08:44,640
‫Portanto, a string de consulta é igual à string de consulta substituída, assim

160
00:08:45,530 --> 00:08:49,750
‫como antes, então o que eu estava esquecendo é simplesmente salvar

161
00:08:49,750 --> 00:08:52,693
‫o resultado aqui de volta na variável.

162
00:08:54,320 --> 00:08:58,670
‫Vamos tentar de novo e agora está funcionando.

163
00:08:58,670 --> 00:09:01,170
‫Agora temos o

164
00:09:01,170 --> 00:09:04,400
‫cifrão na frente da operadora, ótimo.

165
00:09:04,400 --> 00:09:07,840
‫Ok, então funciona, vamos nos livrar desses comentários aqui e agora, finalmente,

166
00:09:07,840 --> 00:09:10,430
‫tudo o que temos que fazer é

167
00:09:10,430 --> 00:09:13,703
‫realmente não usar o objeto de consulta aqui, mas apenas usá-lo.

168
00:09:16,730 --> 00:09:19,290
‫Então JSON. analise a string de

169
00:09:19,290 --> 00:09:22,020
‫consulta e, claro, se você não tiver nenhum operador na

170
00:09:22,020 --> 00:09:23,770
‫string de consulta, tudo funcionará perfeitamente.

171
00:09:23,770 --> 00:09:27,920
‫Ele simplesmente não encontrará nenhum desses quatro operadores lá, mas não há

172
00:09:27,920 --> 00:09:29,670
‫problema, ele simplesmente não substituirá

173
00:09:30,539 --> 00:09:31,403
‫nada.

174
00:09:32,681 --> 00:09:36,290
‫E também vamos tentar fazer isso e está demorando

175
00:09:37,690 --> 00:09:39,800
‫um pouco, mas na verdade

176
00:09:39,800 --> 00:09:41,750
‫ele voltou com três

177
00:09:41,750 --> 00:09:45,020
‫resultados, então vamos verificar se eles estão realmente corretos.

178
00:09:45,020 --> 00:09:47,860
‫Então a duração deve ser maior ou igual

179
00:09:47,860 --> 00:09:50,570
‫a cinco, e este aqui tem duração de

180
00:09:50,570 --> 00:09:52,730
‫cinco, isso tem duração de nove,

181
00:09:52,730 --> 00:09:54,880
‫que é maior ou igual a

182
00:09:54,880 --> 00:09:58,730
‫cinco, e está realmente funcionando, a dificuldade ainda é fácil e

183
00:09:58,730 --> 00:10:02,460
‫daí o que isso significa que o código que acabamos de

184
00:10:02,460 --> 00:10:04,603
‫implementar funciona muito bem.

185
00:10:05,480 --> 00:10:08,750
‫Perfeito, agora vamos apenas por diversão adicionar

186
00:10:08,750 --> 00:10:11,380
‫outro parâmetro lá, então vamos filtrar

187
00:10:11,380 --> 00:10:13,860
‫pelo preço agora também.

188
00:10:13,860 --> 00:10:18,860
‫Este aqui tem quase 2.000, depois 1100, este aqui tem 300.

189
00:10:19,350 --> 00:10:23,070
‫Portanto, vamos filtrar por preços inferiores a mil ou

190
00:10:23,070 --> 00:10:25,150
‫menos de mil e quinhentos.

191
00:10:28,100 --> 00:10:32,920
‫E o preço, e agora novamente nossos suportes,

192
00:10:32,920 --> 00:10:37,920
‫e usamos menos de 1500, e tudo bem, envie isso.

193
00:10:41,320 --> 00:10:46,240
‫E o que temos aqui, oh, agora só temos dois resultados.

194
00:10:46,240 --> 00:10:51,240
‫E, de fato, os preços aqui, 397, e aqui 1197, e então o

195
00:10:51,420 --> 00:10:54,930
‫anterior a isso era de 2.000 agora se foi.

196
00:10:54,930 --> 00:10:57,470
‫Então, filtramos esse também usando

197
00:10:57,470 --> 00:11:00,670
‫novamente o operador que acabamos de implementar.

198
00:11:00,670 --> 00:11:03,030
‫E agora poderíamos filtrar todos

199
00:11:03,030 --> 00:11:07,060
‫os tipos de coisas aqui, mas você entendeu, então,

200
00:11:07,060 --> 00:11:10,110
‫sim, implementamos nosso tipo de filtragem avançada

201
00:11:10,110 --> 00:11:14,500
‫aqui neste ponto, que agora aceita até mesmo esses quatro operadores.

202
00:11:14,500 --> 00:11:16,600
‫Agora, no mundo real, teríamos

203
00:11:16,600 --> 00:11:19,340
‫então que escrever alguma documentação, basicamente para

204
00:11:19,340 --> 00:11:22,040
‫permitir ao usuário saber quais tipos de

205
00:11:22,040 --> 00:11:25,100
‫operação ele pode fazer em nossa API, certo?

206
00:11:25,100 --> 00:11:28,800
‫Então, novamente, o ideal seria documentar completamente nossa API, especificando

207
00:11:28,800 --> 00:11:31,660
‫quais solicitações podem ser feitas usando quais métodos

208
00:11:31,660 --> 00:11:34,360
‫htp e também que tipo de filtragem

209
00:11:34,360 --> 00:11:36,490
‫ou classificação, ou todos esses

210
00:11:36,490 --> 00:11:39,580
‫recursos, quais deles estão disponíveis e como eles

211
00:11:39,580 --> 00:11:41,570
‫podem usá-los, certo ?

212
00:11:41,570 --> 00:11:44,400
‫Agora, em nosso caso, é claro que não faremos

213
00:11:44,400 --> 00:11:47,000
‫isso, mas, novamente, não se esqueça que se

214
00:11:47,000 --> 00:11:50,160
‫você está realmente implementando uma API que será usada por

215
00:11:50,160 --> 00:11:53,600
‫outra pessoa, então você realmente deve fazer esse tipo de documentação.

216
00:11:53,600 --> 00:11:56,780
‫De qualquer forma, vamos agora passar para o nosso próximo

217
00:11:56,780 --> 00:11:59,203
‫vídeo e implementar uma funcionalidade de classificação.

