﻿1
00:00:01,100 --> 00:00:03,780
‫Instructor: Usemos ahora un proceso llamado

2
00:00:03,780 --> 00:00:06,610
‫poblar para tener realmente acceso a los

3
00:00:06,610 --> 00:00:10,173
‫guías turísticos referenciados cada vez que solicitemos un recorrido determinado.

4
00:00:11,820 --> 00:00:14,290
‫Entonces, en el último video, creamos

5
00:00:14,290 --> 00:00:17,660
‫una referencia al usuario, aquí en este campo de guías,

6
00:00:17,660 --> 00:00:20,180
‫justo en nuestro modelo de recorrido, ¿verdad?

7
00:00:20,180 --> 00:00:22,840
‫Y ahora usaremos rellenar para reemplazar básicamente

8
00:00:22,840 --> 00:00:25,610
‫los campos a los que hicimos referencia

9
00:00:25,610 --> 00:00:28,210
‫con los datos relacionados reales.

10
00:00:28,210 --> 00:00:30,330
‫Y el resultado de

11
00:00:30,330 --> 00:00:32,920
‫eso parecerá que los datos siempre han

12
00:00:32,920 --> 00:00:35,100
‫estado incrustados, cuando de hecho, como

13
00:00:35,100 --> 00:00:38,280
‫sabemos, están en una colección completamente diferente, ¿de acuerdo?

14
00:00:38,280 --> 00:00:41,940
‫Ahora, el proceso de llenado siempre ocurre en una consulta.

15
00:00:41,940 --> 00:00:44,713
‫Y ahora vayamos a nuestro controlador de

16
00:00:46,000 --> 00:00:50,340
‫recorrido, y luego directamente a la función donde obtenemos un solo recorrido.

17
00:00:50,340 --> 00:00:52,460
‫Así que aquí, haz un recorrido.

18
00:00:52,460 --> 00:00:55,440
‫Y aquí está nuestra consulta, ¿verdad?

19
00:00:55,440 --> 00:00:57,831
‫Así que aquí es donde construimos nuestra consulta.

20
00:00:57,831 --> 00:01:00,450
‫Y ahora todo lo que tenemos que hacer es agregar

21
00:01:00,450 --> 00:01:02,183
‫el relleno a la consulta.

22
00:01:04,370 --> 00:01:07,440
‫Entonces, complete, y luego el nombre del campo que

23
00:01:07,440 --> 00:01:09,250
‫realmente queremos completar y

24
00:01:10,490 --> 00:01:12,533
‫que se llama guías, ¿de acuerdo?

25
00:01:13,950 --> 00:01:17,850
‫Y si lo piensas bien, este nombre tiene sentido.

26
00:01:17,850 --> 00:01:21,080
‫Así que queremos poblar básicamente para

27
00:01:21,080 --> 00:01:24,940
‫completar el campo llamado guías en nuestro modelo.

28
00:01:24,940 --> 00:01:27,870
‫Bien, de nuevo, este campo de guías

29
00:01:27,870 --> 00:01:29,860
‫solo contiene la referencia.

30
00:01:29,860 --> 00:01:32,620
‫y con poblar, lo llenaremos con los

31
00:01:32,620 --> 00:01:36,750
‫datos reales, de acuerdo y nuevamente solo en la consulta y no

32
00:01:36,750 --> 00:01:39,890
‫en la base de datos real, ¿de acuerdo?

33
00:01:39,890 --> 00:01:41,840
‫Entonces, esto es realmente todo lo que necesitamos hacer.

34
00:01:41,840 --> 00:01:46,760
‫Y ahora echemos un vistazo al resultado, ¿de acuerdo?

35
00:01:46,760 --> 00:01:51,760
‫Entonces, esta es la identificación del recorrido y recordemos que así es como

36
00:01:51,840 --> 00:01:55,370
‫se ven bien los guías, ahora mismo, ¿de acuerdo?

37
00:01:55,370 --> 00:01:59,323
‫Pero si ahora, hacemos un recorrido y con esa

38
00:02:01,170 --> 00:02:03,260
‫identificación, esperemos ahora, y

39
00:02:03,260 --> 00:02:07,220
‫de hecho, aquí están los datos sobre las guías.

40
00:02:07,220 --> 00:02:10,720
‫Bien, estos dos elementos que ya teníamos en

41
00:02:10,720 --> 00:02:14,600
‫las guías, ahora se han completado con los datos reales.

42
00:02:14,600 --> 00:02:17,373
‫Y si ahora echamos un vistazo a

43
00:02:18,550 --> 00:02:21,933
‫obtener todos los recorridos, eliminemos algunas de estas cosas aquí.

44
00:02:22,842 --> 00:02:25,073
‫Tenemos demasiadas cosas abiertas aquí.

45
00:02:26,010 --> 00:02:28,423
‫Entonces, si ahora obtenemos todos los recorridos,

46
00:02:29,730 --> 00:02:31,820
‫está bien, desplácese hasta el final

47
00:02:31,820 --> 00:02:33,280
‫donde debería estar

48
00:02:36,030 --> 00:02:38,590
‫el nuevo y aparentemente ahora está bien,

49
00:02:38,590 --> 00:02:40,690
‫oh, eso es porque tengo este

50
00:02:41,840 --> 00:02:46,610
‫filtro aquí, eliminémoslo, y ahora tengo mi 10 resultados y en realidad está aquí,

51
00:02:46,610 --> 00:02:49,270
‫por lo que el nuevo recorrido de prueba.

52
00:02:49,270 --> 00:02:52,290
‫Y ahora ves que aquí vuelve a mostrarnos

53
00:02:52,290 --> 00:02:55,860
‫solo los valores que están realmente en la base de datos.

54
00:02:55,860 --> 00:02:58,010
‫Así que también confirmemos eso aquí en Compass.

55
00:03:01,940 --> 00:03:05,200
‫Y así, de hecho, como puede ver, todavía no

56
00:03:05,200 --> 00:03:09,750
‫tenemos los datos reales aquí en la base de datos, sino solo los identificadores.

57
00:03:09,750 --> 00:03:13,290
‫De acuerdo, y es solo ese paso de llenado el que

58
00:03:13,290 --> 00:03:16,540
‫luego reemplazará estos identificadores con los datos reales, ¿de acuerdo?

59
00:03:16,540 --> 00:03:18,740
‫Y aquí mismo, eso no

60
00:03:18,740 --> 00:03:21,260
‫sucede bien porque no implementamos el poblamiento

61
00:03:21,260 --> 00:03:24,200
‫en el controlador de ruta get all tours.

62
00:03:24,200 --> 00:03:27,950
‫Bien, ahora permítanme mostrarles un pequeño truco que podemos

63
00:03:27,950 --> 00:03:30,490
‫hacer con la función rellenar.

64
00:03:30,490 --> 00:03:33,590
‫Lo que en realidad es también seleccionar ciertos campos.

65
00:03:33,590 --> 00:03:38,370
‫Entonces, por ejemplo, no estamos interesados en esta propiedad v aquí y tampoco

66
00:03:38,370 --> 00:03:41,350
‫en passwordChangedAt right, así que ese no es

67
00:03:41,350 --> 00:03:42,683
‫el tipo de

68
00:03:42,683 --> 00:03:45,660
‫datos que queremos sobre nuestros guías turísticos.

69
00:03:45,660 --> 00:03:49,197
‫Y aquí, en poblar, podemos especificar eso.

70
00:03:49,197 --> 00:03:52,230
‫Entonces, en lugar de simplemente pasar

71
00:03:52,230 --> 00:03:55,280
‫la cadena, podemos crear un objeto

72
00:03:56,620 --> 00:03:57,793
‫de opciones

73
00:03:59,440 --> 00:04:02,850
‫y luego podemos decir, la ruta es

74
00:04:02,850 --> 00:04:07,850
‫guías, así que básicamente, el nombre del campo que queremos reemplazar,

75
00:04:09,800 --> 00:04:11,553
‫y luego, como

76
00:04:12,710 --> 00:04:16,970
‫de costumbre, podemos usar select , y luego menos,

77
00:04:16,970 --> 00:04:21,790
‫este aquí y también, el otro, así que passwordChangedAt, es más

78
00:04:21,790 --> 00:04:25,370
‫fácil de copiar, de acuerdo, así que cambiémoslo

79
00:04:25,370 --> 00:04:27,603
‫aquí y enviemos esto nuevamente.

80
00:04:28,600 --> 00:04:31,800
‫Y esta, por supuesto, no es la ruta

81
00:04:31,800 --> 00:04:35,910
‫correcta, lo siento mucho, creo que también la usé antes,

82
00:04:35,910 --> 00:04:38,143
‫en realidad, donde realmente quería

83
00:04:39,040 --> 00:04:42,970
‫mostrarles esta, cierto, y lo siento mucho, pero aún así,

84
00:04:42,970 --> 00:04:45,920
‫queremos deshacernos. de aquí es esta V

85
00:04:45,920 --> 00:04:47,510
‫y esta contraseñaChangedAt.

86
00:04:47,510 --> 00:04:49,230
‫Y ya lo

87
00:04:49,230 --> 00:04:51,737
‫hicimos, así que si lo enviamos

88
00:04:51,737 --> 00:04:55,810
‫ahora, por supuesto, solo obtenemos los datos que nos interesan.

89
00:04:55,810 --> 00:04:58,540
‫Muy bien, entonces esta función de poblar

90
00:04:58,540 --> 00:05:01,110
‫es una herramienta absolutamente fundamental para trabajar

91
00:05:01,110 --> 00:05:03,160
‫con datos en Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫Y especialmente, por supuesto,

93
00:05:04,790 --> 00:05:06,760
‫cuando hay relaciones entre los datos,

94
00:05:06,760 --> 00:05:09,860
‫está bien, por lo que siempre debe saber exactamente cómo

95
00:05:09,860 --> 00:05:12,220
‫y cuándo usarlos para sus propias aplicaciones.

96
00:05:12,220 --> 00:05:15,040
‫Y para entrenarnos para eso, por supuesto lo

97
00:05:15,040 --> 00:05:18,200
‫usaremos muchas veces más a lo largo de esta sección.

98
00:05:18,200 --> 00:05:21,140
‫Ahora, solo una cosa que quiero que tenga

99
00:05:21,140 --> 00:05:24,280
‫en cuenta es que, en segundo plano, el uso de

100
00:05:24,280 --> 00:05:26,300
‫poblar aún creará una nueva

101
00:05:26,300 --> 00:05:29,290
‫consulta, por lo que esto podría afectar su rendimiento.

102
00:05:29,290 --> 00:05:31,985
‫Está bien, por supuesto, si solo lo hace

103
00:05:31,985 --> 00:05:35,430
‫una o dos veces y en una especie de aplicación pequeña, entonces

104
00:05:35,430 --> 00:05:38,170
‫ese pequeño impacto en el rendimiento no es gran cosa.

105
00:05:38,170 --> 00:05:40,944
‫Pero en una aplicación enorme, con toneladas

106
00:05:40,944 --> 00:05:43,469
‫de datos por todas partes, eso

107
00:05:43,469 --> 00:05:46,450
‫podría tener algún tipo de efecto, ¿de acuerdo?

108
00:05:46,450 --> 00:05:47,960
‫Así que tenlo en cuenta.

109
00:05:47,960 --> 00:05:51,430
‫De acuerdo, y realmente tiene sentido, porque ¿de

110
00:05:51,430 --> 00:05:54,700
‫qué otra manera Mongoose podría obtener datos sobre

111
00:05:54,700 --> 00:05:57,700
‫recorridos y usuarios al mismo tiempo?

112
00:05:57,700 --> 00:06:01,050
‫Necesita crear una nueva consulta básicamente

113
00:06:01,050 --> 00:06:03,960
‫para poder crear esta conexión.

114
00:06:03,960 --> 00:06:06,060
‫Bien, y ahora solo para terminar esto,

115
00:06:06,060 --> 00:06:07,763
‫recordemos lo que les

116
00:06:07,763 --> 00:06:11,610
‫mostré de que esto en realidad no funcionó cuando tenemos todos los recorridos.

117
00:06:11,610 --> 00:06:15,460
‫Entonces, recuerde cómo en esta situación, simplemente obtenemos los

118
00:06:15,460 --> 00:06:18,620
‫identificadores de los guías turísticos y no los

119
00:06:18,620 --> 00:06:20,850
‫datos de usuario referenciados.

120
00:06:20,850 --> 00:06:24,050
‫De acuerdo, una solución sería básicamente copiar este

121
00:06:24,050 --> 00:06:27,956
‫código aquí, por lo que esta función de poblar, también aquí

122
00:06:27,956 --> 00:06:30,950
‫en este controlador de ruta, pero por

123
00:06:30,950 --> 00:06:34,390
‫supuesto, el código duplicado nunca es una buena idea.

124
00:06:34,390 --> 00:06:35,635
‫Y espero que

125
00:06:35,635 --> 00:06:39,640
‫ya conozca en este momento una mejor manera de hacer esto.

126
00:06:39,640 --> 00:06:42,310
‫Y la respuesta es el middleware de consultas.

127
00:06:42,310 --> 00:06:46,833
‫Bien, avancemos rápidamente y pasemos a nuestro modelo, y

128
00:06:47,910 --> 00:06:49,620
‫estoy copiando este

129
00:06:51,731 --> 00:06:55,253
‫código aquí ahora y, sí, hagámoslo aquí.

130
00:06:57,580 --> 00:06:58,413
‫Entonces,

131
00:06:59,430 --> 00:07:03,460
‫un pre y luego lo haré como antes con

132
00:07:03,460 --> 00:07:06,640
‫una expresión regular, que luego funcionará para

133
00:07:06,640 --> 00:07:09,363
‫todo lo que comience con find.

134
00:07:11,830 --> 00:07:13,083
‫Entonces, así, está

135
00:07:17,010 --> 00:07:21,500
‫bien, y por supuesto, hacemos esto en el middleware de consultas, bueno porque,

136
00:07:21,500 --> 00:07:23,820
‫este es el tipo de middleware

137
00:07:23,820 --> 00:07:27,000
‫que se ejecutará cada vez que haya una consulta.

138
00:07:27,000 --> 00:07:30,540
‫Bien, juntemos todos estos middlewares previos y

139
00:07:32,180 --> 00:07:34,943
‫luego tengamos el post.

140
00:07:37,230 --> 00:07:42,230
‫Muy bien, déjeme copiar el código que teníamos antes y ahora agreguemoslo

141
00:07:42,660 --> 00:07:45,410
‫a esto, porque recuerde que en

142
00:07:45,410 --> 00:07:47,620
‫el middleware de consultas,

143
00:07:47,620 --> 00:07:50,810
‫esto siempre apunta a la consulta actual.

144
00:07:50,810 --> 00:07:53,760
‫Y ahora, básicamente, todas las consultas completarán automáticamente

145
00:07:53,760 --> 00:07:56,560
‫el campo de guías con el usuario

146
00:07:56,560 --> 00:07:58,740
‫al que se hace referencia.

147
00:07:58,740 --> 00:08:02,053
‫Bien, y ahora podemos deshacernos de él aquí.

148
00:08:05,040 --> 00:08:07,770
‫Y sí, eso es todo.

149
00:08:07,770 --> 00:08:09,720
‫Así que ahora lo hacemos aquí, en

150
00:08:09,720 --> 00:08:12,040
‫lugar de hacerlo en dos lugares, en el controlador.

151
00:08:12,040 --> 00:08:15,200
‫Y este es un pequeño truco en caso de

152
00:08:15,200 --> 00:08:17,713
‫que siempre quiera completar todos sus documentos.

153
00:08:19,130 --> 00:08:20,923
‫Entonces, probémoslo.

154
00:08:21,940 --> 00:08:23,993
‫Primero, si todavía funciona aquí.

155
00:08:24,840 --> 00:08:27,553
‫Y de hecho lo hace, por lo que obtenemos nuestros dos usuarios.

156
00:08:28,530 --> 00:08:32,120
‫Y luego probémoslo aquí donde antes no funcionaba y

157
00:08:32,120 --> 00:08:36,060
‫ahora sí, así que aquí está el resultado de eso.

158
00:08:36,060 --> 00:08:38,790
‫Y ahora, solo para asegurarnos

159
00:08:38,790 --> 00:08:43,384
‫de que realmente funciona, actualicémoslo y, básicamente, agreguemos otra guía turística.

160
00:08:43,384 --> 00:08:48,320
‫Así que copiemos la identificación del recorrido aquí y luego actualice el recorrido,

161
00:08:49,300 --> 00:08:51,160
‫por lo que debemos poner

162
00:08:51,160 --> 00:08:55,563
‫la identificación aquí, y luego en el cuerpo, obtengámoslo de crear recorrido,

163
00:08:58,140 --> 00:08:59,433
‫por lo que

164
00:09:02,040 --> 00:09:04,360
‫esta guía, y lo ponemos aquí,

165
00:09:04,360 --> 00:09:07,410
‫y luego también necesitamos obtener nuestro otro usuario.

166
00:09:07,410 --> 00:09:10,960
‫Entonces, es este de aquí, que en realidad no es

167
00:09:10,960 --> 00:09:14,710
‫una guía o ni siquiera un administrador, pero aún así

168
00:09:14,710 --> 00:09:16,933
‫es solo para probar, así

169
00:09:19,450 --> 00:09:22,423
‫que tomemos esta identificación y luego pongámosla aquí.

170
00:09:24,090 --> 00:09:28,640
‫Entonces, actualicémoslo, eso todavía funciona, y ahora, incluso

171
00:09:28,640 --> 00:09:31,070
‫en esta salida,

172
00:09:31,070 --> 00:09:34,130
‫ya tenemos los datos completos.

173
00:09:34,130 --> 00:09:36,410
‫De acuerdo, porque en nuestra expresión regular,

174
00:09:36,410 --> 00:09:38,300
‫recuerde que usamos find.

175
00:09:38,300 --> 00:09:42,450
‫Y así, esta actualización aquí se implementa usando find by id y

176
00:09:42,450 --> 00:09:45,465
‫update, por lo que también comienza con find y,

177
00:09:45,465 --> 00:09:49,110
‫por lo tanto, el middleware de consulta que éramos antes

178
00:09:49,110 --> 00:09:51,690
‫también se aplica a esta función.

179
00:09:51,690 --> 00:09:55,440
‫De acuerdo, así es como funciona el poblado.

180
00:09:55,440 --> 00:09:58,640
‫De acuerdo, de nuevo, una herramienta extremadamente importante en tu

181
00:09:58,640 --> 00:10:01,200
‫caja de herramientas de Mongoose, de acuerdo.

182
00:10:01,200 --> 00:10:02,910
‫Y solo para

183
00:10:02,910 --> 00:10:05,770
‫asegurarnos, tomemos 15 segundos aquí para recapitular.

184
00:10:05,770 --> 00:10:08,700
‫Entonces este es un proceso de dos pasos.

185
00:10:08,700 --> 00:10:12,080
‫Primero, crea una referencia a otro modelo.

186
00:10:12,080 --> 00:10:14,680
‫Y así, con esto, crea efectivamente

187
00:10:14,680 --> 00:10:17,410
‫la relación entre estos dos conjuntos de datos.

188
00:10:17,410 --> 00:10:20,349
‫Luego, en el segundo paso, completa ese

189
00:10:20,349 --> 00:10:23,010
‫campo que acaba de especificar antes,

190
00:10:23,010 --> 00:10:26,920
‫de modo que las guías utilicen el método de poblar.

191
00:10:26,920 --> 00:10:30,350
‫Muy bien, muy simple, muy directo, todo lo que necesita

192
00:10:30,350 --> 00:10:32,330
‫es comprender realmente la

193
00:10:32,330 --> 00:10:34,620
‫lógica detrás de todo esto y

194
00:10:34,620 --> 00:10:37,163
‫luego está listo para comenzar a usarlo.

