﻿1
00:00:00,960 --> 00:00:02,940
‫-: Entonces, la función de

2
00:00:02,940 --> 00:00:06,250
‫filtro que hemos implementado en este momento ya funciona

3
00:00:06,250 --> 00:00:09,860
‫muy bien, pero en este video queremos llevarlo al siguiente

4
00:00:09,860 --> 00:00:12,733
‫nivel al permitir algunas consultas aún más complejas.

5
00:00:14,210 --> 00:00:17,680
‫Entonces, en este momento, un usuario solo puede

6
00:00:17,680 --> 00:00:22,430
‫filtrar los documentos estableciendo una clave igual a un valor, ¿verdad?

7
00:00:22,430 --> 00:00:24,760
‫Pero ahora, en realidad, también

8
00:00:24,760 --> 00:00:27,680
‫queremos implementar los operadores mayor que, mayor

9
00:00:27,680 --> 00:00:31,733
‫o igual que, menor que y menor o igual que.

10
00:00:32,780 --> 00:00:34,510
‫Entonces, en lugar de

11
00:00:34,510 --> 00:00:37,500
‫simplemente tener igual, queremos poder, por ejemplo, decir

12
00:00:37,500 --> 00:00:40,130
‫una duración mayor o igual a cinco,

13
00:00:40,130 --> 00:00:42,290
‫y no solo igual, ¿de acuerdo?

14
00:00:42,290 --> 00:00:45,310
‫Y eso hace que todo sea un poco más complejo.

15
00:00:45,310 --> 00:00:48,140
‫Ahora, antes de escribir cualquier código, haré

16
00:00:48,140 --> 00:00:50,810
‫el ejercicio de escribir la consulta sobre

17
00:00:50,810 --> 00:00:53,043
‫cómo debería verse en MongoDB.

18
00:00:55,150 --> 00:00:58,200
‫Entonces, ¿cómo se vería realmente el objeto de filtro?

19
00:00:58,200 --> 00:01:00,360
‫Y escribámoslo aquí como un comentario, y

20
00:01:00,360 --> 00:01:02,273
‫nuevamente, solo como un ejercicio.

21
00:01:03,270 --> 00:01:06,090
‫Entonces, el objeto se vería un poco

22
00:01:06,090 --> 00:01:09,723
‫así, así que la dificultad, comenzaría con ese, se establecería en

23
00:01:14,040 --> 00:01:17,030
‫fácil y luego en la duración; y ahora

24
00:01:17,030 --> 00:01:21,000
‫recuerde que cuando queremos usar un operador, necesitamos iniciar otro objeto.

25
00:01:21,000 --> 00:01:24,530
‫Y luego para el operador mayor o

26
00:01:24,530 --> 00:01:29,530
‫igual que lo usamos así, a cinco, ¿verdad, recuerdas eso?

27
00:01:30,640 --> 00:01:33,050
‫Así es como escribiríamos manualmente el

28
00:01:33,050 --> 00:01:36,383
‫objeto de filtro para la consulta que acabamos de especificar.

29
00:01:37,340 --> 00:01:40,240
‫Ahora volvamos a Postman para

30
00:01:40,240 --> 00:01:43,860
‫poder mostrarte una forma muy estándar de escribir

31
00:01:43,860 --> 00:01:47,440
‫una cadena de consulta que incluya estos operadores.

32
00:01:47,440 --> 00:01:50,670
‫Y lo hacemos así, entonces antes del signo igual

33
00:01:50,670 --> 00:01:53,150
‫abrimos los corchetes y luego aquí

34
00:01:53,150 --> 00:01:55,880
‫escribimos el operador, entonces en este caso

35
00:01:55,880 --> 00:01:58,650
‫mayor que o igual, y eso es todo.

36
00:01:58,650 --> 00:02:01,880
‫Básicamente así, agregamos una tercera parte al par

37
00:02:01,880 --> 00:02:04,680
‫clave-valor, por lo que tenemos la

38
00:02:04,680 --> 00:02:07,610
‫clave, el valor y ahora también el operador.

39
00:02:07,610 --> 00:02:09,930
‫Y usamos nuevamente estos corchetes

40
00:02:09,930 --> 00:02:11,923
‫para especificar el operador.

41
00:02:13,060 --> 00:02:15,320
‫Nuevamente, esa es una forma estándar y,

42
00:02:15,320 --> 00:02:17,170
‫por lo tanto, ahora

43
00:02:17,170 --> 00:02:21,150
‫sigamos adelante y echemos un vistazo a la cadena de consulta que

44
00:02:21,150 --> 00:02:23,360
‫nos brinda Express y, al igual

45
00:02:23,360 --> 00:02:25,823
‫que antes, registremos una consulta de punto

46
00:02:27,310 --> 00:02:32,310
‫de registro en la consola, una consulta de punto de registro de registro, todo Derecha.

47
00:02:32,600 --> 00:02:35,530
‫Entonces, echemos un vistazo a cómo se verá nuestro

48
00:02:35,530 --> 00:02:37,640
‫objeto de consulta cuando especifiquemos

49
00:02:37,640 --> 00:02:39,940
‫la cadena de consulta de esta manera.

50
00:02:39,940 --> 00:02:42,040
‫Muy bien, ahora lo primero que notará es

51
00:02:42,040 --> 00:02:43,640
‫que tenemos un error aquí,

52
00:02:43,640 --> 00:02:45,573
‫pero no se preocupe por eso por ahora.

53
00:02:46,570 --> 00:02:50,470
‫Entonces, lo que me interesa aquí es este objeto, así que

54
00:02:50,470 --> 00:02:52,920
‫déjame seguir adelante y copiarlo aquí.

55
00:02:55,570 --> 00:02:58,820
‫Muy bien, entonces, ¿qué notas aquí?

56
00:02:58,820 --> 00:03:01,420
‫Bueno, lo que vemos aquí es que el

57
00:03:01,420 --> 00:03:03,870
‫objeto de consulta se ve casi idéntico

58
00:03:03,870 --> 00:03:06,350
‫al objeto de filtro que escribimos manualmente, la

59
00:03:06,350 --> 00:03:10,513
‫única diferencia es que en este tenemos el signo del operador MongoDB aquí.

60
00:03:11,360 --> 00:03:13,420
‫Así que eso es realmente lo

61
00:03:13,420 --> 00:03:16,210
‫único que falta aquí delante de este nombre de operador.

62
00:03:16,210 --> 00:03:18,620
‫De acuerdo, entonces la solución

63
00:03:18,620 --> 00:03:21,780
‫para esto es básicamente reemplazar todos los operadores

64
00:03:21,780 --> 00:03:24,300
‫como este con sus operadores correspondientes de

65
00:03:24,300 --> 00:03:29,030
‫MongoDB, así que básicamente agregando este signo de dólar aquí, está bien.

66
00:03:29,030 --> 00:03:31,270
‫Así que ahora implementemos eso, y de

67
00:03:31,270 --> 00:03:33,433
‫hecho lo haremos en algún lugar aquí,

68
00:03:34,810 --> 00:03:36,960
‫agreguemos algunos comentarios más aquí.

69
00:03:38,700 --> 00:03:42,090
‫Así que el filtrado que hicimos en la última lección,

70
00:03:42,090 --> 00:03:45,313
‫ahora aquí agreguemos un filtrado avanzado, y ese es

71
00:03:47,920 --> 00:03:50,903
‫el código que vamos a escribir ahora.

72
00:03:52,720 --> 00:03:56,393
‫Ahora pongamos este código aquí en la parte superior, de acuerdo.

73
00:03:57,290 --> 00:03:59,860
‫Entonces, este código aquí realmente no lo necesitamos, pero

74
00:03:59,860 --> 00:04:01,160
‫aún quiero mantenerlo

75
00:04:01,160 --> 00:04:03,193
‫aquí, así que pongámoslo aquí al final.

76
00:04:04,960 --> 00:04:08,270
‫Y luego solo este código aquí como referencia solo para asegurarnos

77
00:04:08,270 --> 00:04:11,210
‫de que sabemos lo que estamos haciendo aquí.

78
00:04:11,210 --> 00:04:13,330
‫Muy bien, y ahora que sabemos lo

79
00:04:13,330 --> 00:04:15,230
‫que tenemos que hacer aquí, en

80
00:04:15,230 --> 00:04:17,400
‫realidad es solo un simple problema de Javascript.

81
00:04:17,400 --> 00:04:19,420
‫Y la forma en que lo

82
00:04:19,420 --> 00:04:22,710
‫estoy resolviendo es la siguiente, así que primero convertiré el objeto en

83
00:04:25,230 --> 00:04:30,230
‫una cadena para que la cadena de consulta sea igual a JSON dot stringify del objeto de

84
00:04:35,600 --> 00:04:38,780
‫consulta, y ahora puedo usar esa cadena de consulta para usar

85
00:04:38,780 --> 00:04:40,963
‫la función de reemplazo en ella .

86
00:04:42,060 --> 00:04:44,530
‫Muy bien, entonces lo que quiero reemplazar

87
00:04:44,530 --> 00:04:48,330
‫ahora es el gte con el signo de dólar gte, y

88
00:04:48,330 --> 00:04:50,403
‫luego también algún otro operador.

89
00:04:51,360 --> 00:04:53,290
‫Entonces, los que queremos

90
00:04:53,290 --> 00:04:56,113
‫reemplazar son mayores o iguales, mayores que,

91
00:04:56,970 --> 00:05:01,010
‫menores o iguales, y menores que, y hay un par

92
00:05:01,010 --> 00:05:03,620
‫de formas en las que podemos

93
00:05:03,620 --> 00:05:06,193
‫hacerlo, pero usaré una expresión regular.

94
00:05:07,243 --> 00:05:10,340
‫Y para mí, personalmente, las expresiones regulares son

95
00:05:10,340 --> 00:05:13,450
‫uno de los conceptos más difíciles en Javascript y,

96
00:05:13,450 --> 00:05:16,210
‫de hecho, en general en la programación.

97
00:05:16,210 --> 00:05:18,270
‫Por lo general, cuando necesito hacer

98
00:05:18,270 --> 00:05:21,538
‫algo como esto, simplemente voy a Stack Overflow o simplemente busco en

99
00:05:21,538 --> 00:05:24,180
‫Google para encontrar la solución adecuada para el problema

100
00:05:24,180 --> 00:05:26,280
‫que estoy tratando de resolver, de acuerdo.

101
00:05:26,280 --> 00:05:28,070
‫Entonces, lo que queremos hacer

102
00:05:28,070 --> 00:05:31,660
‫ahora aquí es básicamente hacer coincidir una de estas cuatro palabras y

103
00:05:31,660 --> 00:05:33,900
‫luego reemplazarla con las mismas palabras pero con

104
00:05:33,900 --> 00:05:35,933
‫el signo de dólar al frente.

105
00:05:36,980 --> 00:05:38,530
‫Entonces, la expresión

106
00:05:38,530 --> 00:05:42,620
‫regular para encontrar una de estas cuatro palabras es la

107
00:05:42,620 --> 00:05:46,820
‫siguiente; entonces abrimos estos paréntesis y luego escribimos los operadores,

108
00:05:46,820 --> 00:05:50,517
‫entonces gte o gt o lte o lt.

109
00:05:55,500 --> 00:06:00,500
‫Y luego también necesitamos agregar este \ b antes y después, y eso es

110
00:06:01,140 --> 00:06:04,283
‫porque solo queremos hacer coincidir estas palabras exactas.

111
00:06:05,220 --> 00:06:08,183
‫Así que imagina que hay una palabra que lo

112
00:06:08,183 --> 00:06:10,700
‫tiene dentro, entonces, por supuesto, no queremos

113
00:06:10,700 --> 00:06:14,070
‫coincidir con la que solo queremos hacer coincidir si es

114
00:06:14,070 --> 00:06:16,840
‫esta palabra exacta, sin ninguna otra cadena alrededor.

115
00:06:16,840 --> 00:06:19,170
‫Entonces, esta expresión regular que tengo aquí se

116
00:06:19,170 --> 00:06:21,310
‫encargará de eso, y en realidad

117
00:06:21,310 --> 00:06:24,670
‫falta una pieza y esa es esta bandera g aquí, lo

118
00:06:24,670 --> 00:06:27,130
‫que significa que en realidad sucederá varias veces.

119
00:06:27,130 --> 00:06:30,270
‫Entonces, si tenemos dos o tres

120
00:06:30,270 --> 00:06:33,880
‫operadores o incluso todos, entonces los reemplazará a todos.

121
00:06:33,880 --> 00:06:36,240
‫Y sin este g aquí, solo

122
00:06:36,240 --> 00:06:40,300
‫reemplazaría la primera aparición, por lo que esta es muy importante.

123
00:06:40,300 --> 00:06:43,460
‫Ahora, ¿con qué queremos reemplazarlo realmente?

124
00:06:43,460 --> 00:06:45,450
‫Bueno, el método replace realmente

125
00:06:45,450 --> 00:06:48,880
‫acepta una devolución de llamada que es muy poderosa, y esta

126
00:06:48,880 --> 00:06:51,100
‫devolución de llamada tiene como primer argumento,

127
00:06:51,100 --> 00:06:53,523
‫la palabra coincidente o la cadena coincidente.

128
00:06:55,060 --> 00:06:58,690
‫Entonces podemos pasar la coincidencia a esa función de devolución de llamada y

129
00:06:58,690 --> 00:07:01,840
‫lo que devolvemos de esta devolución de llamada es la

130
00:07:01,840 --> 00:07:04,690
‫nueva cadena que reemplazará a la anterior, ¿de acuerdo?

131
00:07:04,690 --> 00:07:07,200
‫Así que hagamos una cadena de plantilla

132
00:07:07,200 --> 00:07:08,820
‫aquí, y queremos reemplazar

133
00:07:08,820 --> 00:07:13,820
‫la coincidencia con la coincidencia del signo de dólar, de acuerdo, esta es la parte

134
00:07:14,190 --> 00:07:17,060
‫de la sintaxis de la cadena de la plantilla.

135
00:07:17,060 --> 00:07:19,860
‫Así que esta es esta coincidencia, y luego queremos

136
00:07:19,860 --> 00:07:22,613
‫poner el signo de dólar delante de eso.

137
00:07:25,690 --> 00:07:28,570
‫Y ahora, solo para asegurarnos,

138
00:07:29,970 --> 00:07:34,250
‫logrémoslo en la consola y queramos recuperar el objeto,

139
00:07:34,250 --> 00:07:38,303
‫de modo que JSON analice la cadena de consulta.

140
00:07:40,210 --> 00:07:43,200
‫Muy bien, déjeme seguir adelante y aclarar esto aquí para

141
00:07:43,200 --> 00:07:45,603
‫que pueda ver los resultados un poco mejor.

142
00:07:48,541 --> 00:07:50,050
‫Entonces, nuevamente, obtenemos este error

143
00:07:50,050 --> 00:07:52,240
‫aquí y eso es, por supuesto, porque MongoDB

144
00:07:52,240 --> 00:07:54,330
‫realmente no puede usar la cadena de

145
00:07:54,330 --> 00:07:56,933
‫consulta o el objeto de consulta como lo tenemos ahora.

146
00:07:58,980 --> 00:08:01,300
‫Y aquí tenemos los dos

147
00:08:01,300 --> 00:08:04,610
‫resultados y realmente ves que nuestro resultado es exactamente

148
00:08:04,610 --> 00:08:07,150
‫el mismo que antes y, por lo

149
00:08:07,150 --> 00:08:09,670
‫tanto, algo aquí claramente no está funcionando.

150
00:08:09,670 --> 00:08:12,240
‫Así que tratemos de averiguar qué es eso.

151
00:08:12,240 --> 00:08:15,940
‫Y aquí la expresión regular se ve bien, todo se ve

152
00:08:15,940 --> 00:08:18,707
‫bien aquí, ah, pero está bien, el problema

153
00:08:18,707 --> 00:08:22,470
‫es que la estoy reemplazando en la cadena pero luego no la

154
00:08:22,470 --> 00:08:24,320
‫estoy guardando en ningún lado.

155
00:08:24,320 --> 00:08:28,030
‫Y, en realidad, queremos guardarlo de nuevo en la cadena de consulta.

156
00:08:28,030 --> 00:08:30,580
‫Así que cambiemos esto aquí

157
00:08:30,580 --> 00:08:33,940
‫a un let, para que luego pueda

158
00:08:33,940 --> 00:08:38,940
‫mutar los datos y digamos, cadena de consulta, oh lo siento.

159
00:08:39,640 --> 00:08:44,640
‫Entonces, la cadena de consulta es igual a la cadena de consulta reemplazada,

160
00:08:45,530 --> 00:08:49,750
‫como antes, así que lo que estaba olvidando es simplemente guardar

161
00:08:49,750 --> 00:08:52,693
‫el resultado aquí nuevamente en la variable.

162
00:08:54,320 --> 00:08:58,670
‫Intentémoslo de nuevo, y ahora está funcionando.

163
00:08:58,670 --> 00:09:01,170
‫Así que ahora tenemos el

164
00:09:01,170 --> 00:09:04,400
‫signo de dólar frente al operador, genial.

165
00:09:04,400 --> 00:09:07,840
‫Bien, entonces funciona, eliminémonos de estos comentarios aquí y ahora, finalmente,

166
00:09:07,840 --> 00:09:10,430
‫todo lo que tenemos que hacer es

167
00:09:10,430 --> 00:09:13,703
‫no usar el objeto de consulta, sino simplemente usar esto.

168
00:09:16,730 --> 00:09:19,290
‫Entonces JSON. analizar la cadena de

169
00:09:19,290 --> 00:09:22,020
‫consulta y, por supuesto, si no tiene ningún operador en

170
00:09:22,020 --> 00:09:23,770
‫la cadena de consulta, todo funcionará bien.

171
00:09:23,770 --> 00:09:27,920
‫Simplemente no encontrará ninguno de estos cuatro operadores allí, pero eso no

172
00:09:27,920 --> 00:09:29,670
‫es un problema, simplemente no

173
00:09:30,539 --> 00:09:31,403
‫reemplazará nada.

174
00:09:32,681 --> 00:09:36,290
‫Y también sigamos adelante y probemos esto y está tomando

175
00:09:37,690 --> 00:09:39,800
‫un poco de tiempo, pero de

176
00:09:39,800 --> 00:09:41,750
‫hecho regresó con tres

177
00:09:41,750 --> 00:09:45,020
‫resultados, así que ahora verifiquemos si son realmente correctos.

178
00:09:45,020 --> 00:09:47,860
‫Entonces, la duración debe ser mayor o igual

179
00:09:47,860 --> 00:09:50,570
‫a cinco, y esta aquí tiene una duración

180
00:09:50,570 --> 00:09:52,730
‫de cinco, esta tiene una duración

181
00:09:52,730 --> 00:09:54,880
‫de nueve, que es mayor o

182
00:09:54,880 --> 00:09:58,730
‫igual que cinco, por lo que en realidad está funcionando, la dificultad

183
00:09:58,730 --> 00:10:02,460
‫sigue siendo fácil y entonces qué significa que el código que

184
00:10:02,460 --> 00:10:04,603
‫acabamos de implementar funciona bien.

185
00:10:05,480 --> 00:10:08,750
‫Perfecto, ahora solo por diversión agreguemos otro

186
00:10:08,750 --> 00:10:11,380
‫parámetro allí, así que filtremos por

187
00:10:11,380 --> 00:10:13,860
‫el precio ahora también.

188
00:10:13,860 --> 00:10:18,860
‫Entonces este tiene casi 2000, luego 1100, este tiene 300.

189
00:10:19,350 --> 00:10:23,070
‫Así que ahora filtremos por precios menores a mil,

190
00:10:23,070 --> 00:10:25,150
‫o menores a mil quinientos.

191
00:10:28,100 --> 00:10:32,920
‫Y el precio, y ahora de nuevo nuestros soportes,

192
00:10:32,920 --> 00:10:37,920
‫y usamos menos de 1500, y está bien, envía eso.

193
00:10:41,320 --> 00:10:46,240
‫Y qué obtenemos aquí, oh, ahora solo tenemos dos resultados.

194
00:10:46,240 --> 00:10:51,240
‫Y de hecho, los precios aquí, 397, y aquí 1197, por lo

195
00:10:51,420 --> 00:10:54,930
‫que el anterior al 2000 ya no existe.

196
00:10:54,930 --> 00:10:57,470
‫Así que también lo filtramos

197
00:10:57,470 --> 00:11:00,670
‫usando nuevamente el operador que acabamos de implementar.

198
00:11:00,670 --> 00:11:03,030
‫Y ahora podríamos filtrar por

199
00:11:03,030 --> 00:11:07,060
‫todo tipo de cosas aquí, pero entiendes el punto, así

200
00:11:07,060 --> 00:11:10,110
‫que sí, implementamos nuestro tipo de filtrado avanzado

201
00:11:10,110 --> 00:11:14,500
‫aquí en este punto, que ahora incluso acepta estos cuatro operadores.

202
00:11:14,500 --> 00:11:16,600
‫Ahora, en el mundo real,

203
00:11:16,600 --> 00:11:19,340
‫tendríamos que escribir algo de documentación, básicamente

204
00:11:19,340 --> 00:11:22,040
‫para permitir que el usuario sepa qué

205
00:11:22,040 --> 00:11:25,100
‫tipo de operaciones pueden hacer en nuestra API, ¿verdad?

206
00:11:25,100 --> 00:11:28,800
‫Entonces, nuevamente, idealmente documentaríamos completamente nuestra API, especificando qué solicitudes

207
00:11:28,800 --> 00:11:31,660
‫se pueden realizar usando qué métodos htp,

208
00:11:31,660 --> 00:11:34,360
‫y luego también qué tipo de filtrado

209
00:11:34,360 --> 00:11:36,490
‫o clasificación, o todas estas

210
00:11:36,490 --> 00:11:39,580
‫características, cuáles de ellas están disponibles y cómo

211
00:11:39,580 --> 00:11:41,570
‫pueden usarlas, ¿verdad? ?

212
00:11:41,570 --> 00:11:44,400
‫Ahora, en nuestro caso, por supuesto, no haremos

213
00:11:44,400 --> 00:11:47,000
‫eso, pero nuevamente, no olvide que si

214
00:11:47,000 --> 00:11:50,160
‫realmente está implementando una API que va a ser utilizada

215
00:11:50,160 --> 00:11:53,600
‫por otra persona, entonces realmente debe hacer este tipo de documentación.

216
00:11:53,600 --> 00:11:56,780
‫Pero de todos modos, pasemos ahora a nuestro próximo video

217
00:11:56,780 --> 00:11:59,203
‫e implementemos una función de clasificación.

