﻿1
00:00:01,130 --> 00:00:02,400
‫Instructor: Bienvenido de nuevo.

2
00:00:02,400 --> 00:00:05,260
‫Entonces, después de algunas conferencias teóricas más

3
00:00:05,260 --> 00:00:09,210
‫pesadas, ahora finalmente comenzaremos a implementar nuestro modelo de datos

4
00:00:09,210 --> 00:00:11,640
‫y comenzaremos con las ubicaciones.

5
00:00:11,640 --> 00:00:14,080
‫Entonces, en este video, aprenderá

6
00:00:14,080 --> 00:00:16,680
‫todo sobre los datos geoespaciales en MongoDB.

7
00:00:16,680 --> 00:00:18,120
‫Y este es realmente

8
00:00:18,120 --> 00:00:20,513
‫un tema que personalmente encuentro realmente emocionante.

9
00:00:22,170 --> 00:00:24,630
‫Ahora, recuerde de la lección anterior

10
00:00:24,630 --> 00:00:27,470
‫que nuestros datos de ubicación se integrarán

11
00:00:27,470 --> 00:00:29,070
‫en los recorridos.

12
00:00:29,070 --> 00:00:31,680
‫Y, por lo tanto, básicamente declararemos todo

13
00:00:31,680 --> 00:00:34,040
‫lo relacionado con las ubicaciones en nuestro

14
00:00:34,040 --> 00:00:35,500
‫modelo de gira.

15
00:00:35,500 --> 00:00:40,320
‫Muy bien, abramos ese y justo al final,

16
00:00:40,320 --> 00:00:43,010
‫comencemos agregando startLocation.

17
00:00:43,010 --> 00:00:45,660
‫Bien, entonces tendremos startLocation

18
00:00:45,660 --> 00:00:48,520
‫y luego también, ubicaciones en general.

19
00:00:48,520 --> 00:00:52,680
‫Ahora, MongoDB admite datos geoespaciales listos para usar.

20
00:00:52,680 --> 00:00:56,650
‫Y los datos geoespaciales son básicamente datos que describen

21
00:00:56,650 --> 00:01:00,870
‫lugares en la tierra usando coordenadas de longitud y latitud.

22
00:01:00,870 --> 00:01:03,530
‫Bien, entonces podemos describir puntos

23
00:01:03,530 --> 00:01:06,350
‫simples o también podemos describir geometrías

24
00:01:06,350 --> 00:01:11,350
‫más complejas como líneas o incluso polígonos o incluso múltiples polígonos.

25
00:01:11,350 --> 00:01:13,030
‫Entonces, realmente, todo

26
00:01:13,030 --> 00:01:16,140
‫es posible con datos geoespaciales en MongoDB.

27
00:01:16,140 --> 00:01:20,060
‫Bien, agreguemos nuestro campo startLocation aquí y

28
00:01:24,350 --> 00:01:27,750
‫luego implementemos estos datos geoespaciales.

29
00:01:27,750 --> 00:01:32,330
‫Y MongoDB usa un formato de datos especial llamado GeoJSON.

30
00:01:32,330 --> 00:01:33,663
‫Está bien, entonces.

31
00:01:35,080 --> 00:01:39,043
‫GeoJSON, para especificar datos geoespaciales.

32
00:01:40,370 --> 00:01:43,180
‫Y ahora, ¿cómo funciona esto realmente?

33
00:01:43,180 --> 00:01:46,130
‫Bueno, este objeto que especificamos aquí es en realidad,

34
00:01:46,130 --> 00:01:49,650
‫esta vez, no para las opciones de tipo de esquema como

35
00:01:49,650 --> 00:01:51,963
‫lo tenemos, por ejemplo, aquí arriba.

36
00:01:52,830 --> 00:01:55,970
‫Entonces, este objeto aquí es para las opciones de tipo de esquema.

37
00:01:55,970 --> 00:01:57,190
‫¿Recuérdalo?

38
00:01:57,190 --> 00:01:59,960
‫Pero ahora, este objeto aquí es en realidad

39
00:01:59,960 --> 00:02:01,300
‫un objeto incrustado.

40
00:02:01,300 --> 00:02:02,830
‫Y así, dentro de

41
00:02:02,830 --> 00:02:05,310
‫este objeto, podemos especificar un par de propiedades.

42
00:02:05,310 --> 00:02:08,520
‫De acuerdo, y para que este objeto sea reconocido

43
00:02:08,520 --> 00:02:11,720
‫como JSON geoespacial, necesitamos el tipo y las

44
00:02:11,720 --> 00:02:14,133
‫propiedades de las coordenadas, de acuerdo.

45
00:02:15,210 --> 00:02:17,340
‫Entonces necesitamos tipo y necesitamos

46
00:02:19,270 --> 00:02:21,060
‫coordenadas, de acuerdo.

47
00:02:21,060 --> 00:02:22,970
‫Y ahora, cada uno de

48
00:02:22,970 --> 00:02:26,490
‫estos campos aquí, básicamente, cada uno de estos subcampos obtendrá sus

49
00:02:26,490 --> 00:02:28,470
‫propias opciones de tipo de esquema.

50
00:02:28,470 --> 00:02:31,830
‫Muy bien, básicamente aquí, está un poco anidado, así que tenemos

51
00:02:31,830 --> 00:02:33,453
‫un nivel más profundo.

52
00:02:34,870 --> 00:02:37,910
‫De acuerdo, tenemos las opciones de tipo de esquema

53
00:02:37,910 --> 00:02:41,040
‫de tipo y luego también necesitamos opciones de tipo de

54
00:02:41,040 --> 00:02:44,660
‫esquema para las coordenadas y nuevamente, al igual que las tenemos aquí en

55
00:02:44,660 --> 00:02:47,800
‫estos otros campos con la diferencia de que ahora son subcampos.

56
00:02:47,800 --> 00:02:50,873
‫Entonces, el tipo necesita el tipo de

57
00:02:52,070 --> 00:02:52,903
‫cadena,

58
00:02:53,940 --> 00:02:57,880
‫está bien, y el valor predeterminado debería ser punto.

59
00:02:57,880 --> 00:03:00,240
‫Entonces, ¿recuerdas cómo dije que

60
00:03:00,240 --> 00:03:02,647
‫podemos especificar múltiples geometrías en MongoDB?

61
00:03:02,647 --> 00:03:04,670
‫Y el predeterminado es siempre el punto.

62
00:03:04,670 --> 00:03:07,990
‫Pero nuevamente, también podríamos especificar polígonos o líneas

63
00:03:07,990 --> 00:03:10,380
‫u otras geometrías como esa.

64
00:03:10,380 --> 00:03:12,310
‫Pero en este caso, para startLocation,

65
00:03:12,310 --> 00:03:13,910
‫realmente debería ser point.

66
00:03:13,910 --> 00:03:17,060
‫Entonces, hagamos que esa sea la única opción

67
00:03:17,060 --> 00:03:19,283
‫posible especificando la enumeración, por

68
00:03:20,300 --> 00:03:22,703
‫lo que la propiedad de enumeración.

69
00:03:23,700 --> 00:03:25,800
‫Así que recuerde, podemos especificar una

70
00:03:25,800 --> 00:03:28,900
‫matriz de todas las opciones posibles que este campo

71
00:03:28,900 --> 00:03:33,290
‫puede tomar y, en este caso, solo queremos que sea un punto, de acuerdo.

72
00:03:33,290 --> 00:03:35,580
‫Así que lo hicimos en algún lugar de aquí.

73
00:03:37,810 --> 00:03:39,750
‫Sí, aquí mismo con

74
00:03:39,750 --> 00:03:44,230
‫la dificultad donde dijimos que solo puede ser media o difícil.

75
00:03:44,230 --> 00:03:46,800
‫Bien, y aquí estamos haciendo

76
00:03:46,800 --> 00:03:50,380
‫lo mismo, pero solo con una opción, está bien.

77
00:03:50,380 --> 00:03:52,620
‫Entonces necesitamos definir el tipo,

78
00:03:52,620 --> 00:03:55,340
‫recordar, y también, una matriz de coordenadas.

79
00:03:55,340 --> 00:03:59,370
‫Está bien, y lo hacemos diciendo número,

80
00:03:59,370 --> 00:04:02,470
‫pero luego en estos corchetes.

81
00:04:02,470 --> 00:04:05,020
‫Bien, y eso básicamente significa que esperamos una

82
00:04:05,020 --> 00:04:07,150
‫matriz de números y esta matriz,

83
00:04:07,150 --> 00:04:09,910
‫como dice el nombre, son las coordenadas del punto

84
00:04:09,910 --> 00:04:12,420
‫con la longitud en primer lugar y sólo

85
00:04:12,420 --> 00:04:14,450
‫en segundo lugar, la latitud.

86
00:04:14,450 --> 00:04:16,290
‫Y eso es un

87
00:04:16,290 --> 00:04:18,540
‫poco contradictorio porque generalmente funciona al revés.

88
00:04:18,540 --> 00:04:21,530
‫Pero en GeoJSON, así es como funciona.

89
00:04:21,530 --> 00:04:24,240
‫Entonces, si tuviera que ir, por ejemplo, a

90
00:04:24,240 --> 00:04:25,930
‫Google Maps para obtener

91
00:04:25,930 --> 00:04:29,560
‫sus coordenadas, entonces verá primero la latitud y luego la longitud.

92
00:04:29,560 --> 00:04:31,823
‫De hecho, echemos un vistazo a eso.

93
00:04:33,500 --> 00:04:34,333
‫Así que

94
00:04:36,070 --> 00:04:37,273
‫abre Mapas aquí.

95
00:04:38,570 --> 00:04:40,423
‫Digamos Nueva York.

96
00:04:41,860 --> 00:04:44,543
‫Bien, y si ahora hacemos clic en algún

97
00:04:46,030 --> 00:04:48,520
‫lugar aquí, digamos aquí, entonces obtenemos

98
00:04:48,520 --> 00:04:51,880
‫las coordenadas primero con la latitud y segundo, la longitud.

99
00:04:51,880 --> 00:04:54,960
‫Muy bien, y en caso de que no esté familiarizado

100
00:04:54,960 --> 00:04:56,993
‫con eso, alejemos un poco

101
00:04:58,250 --> 00:05:00,760
‫aquí, para que podamos ver la Tierra entera.

102
00:05:00,760 --> 00:05:01,880
‫Vaya, ¿qué es eso?

103
00:05:02,757 --> 00:05:04,220
‫Bueno.

104
00:05:04,220 --> 00:05:07,610
‫Entonces, la latitud es básicamente la posición horizontal

105
00:05:07,610 --> 00:05:10,680
‫medida en grados comenzando desde el ecuador, es

106
00:05:10,680 --> 00:05:13,280
‫decir, desde aquí hasta aquí.

107
00:05:13,280 --> 00:05:15,350
‫Entonces, en el ecuador, es de cero

108
00:05:15,350 --> 00:05:18,770
‫grados y aquí arriba, en el Polo Norte, es de 90 grados.

109
00:05:18,770 --> 00:05:19,980
‫Y luego

110
00:05:19,980 --> 00:05:23,150
‫la longitud es la misma, pero verticalmente.

111
00:05:23,150 --> 00:05:27,440
‫Así que es la posición a partir de un

112
00:05:27,440 --> 00:05:30,850
‫meridiano, que pasa por aquí, está bien.

113
00:05:30,850 --> 00:05:33,410
‫Entonces, la longitud es la posición vertical

114
00:05:33,410 --> 00:05:34,960
‫a partir de aquí.

115
00:05:34,960 --> 00:05:37,783
‫Y es por eso que este punto aquí que

116
00:05:40,150 --> 00:05:41,183
‫tenemos, en

117
00:05:42,070 --> 00:05:45,400
‫algún lugar de aquí, en algún lugar de Manhattan, tiene

118
00:05:45,400 --> 00:05:48,380
‫una latitud de 40 y una longitud de -73.

119
00:05:48,380 --> 00:05:49,650
‫Está bien.

120
00:05:49,650 --> 00:05:54,540
‫Pero de todos modos, volvamos a nuestro código aquí, por supuesto,

121
00:05:54,540 --> 00:05:58,653
‫porque también quiero especificar una propiedad para la dirección.

122
00:06:01,060 --> 00:06:05,600
‫Así que agregue otra cadena y luego también, una descripción

123
00:06:05,600 --> 00:06:07,457
‫de este startLocation y

124
00:06:08,890 --> 00:06:12,070
‫otra vez, como una cadena, está bien.

125
00:06:12,070 --> 00:06:14,060
‫Y no vamos a decir que

126
00:06:14,060 --> 00:06:16,930
‫cualquiera de estos campos deba ser obligatorio porque queremos que se

127
00:06:16,930 --> 00:06:19,490
‫nos permita dejar la ubicación de inicio en blanco.

128
00:06:19,490 --> 00:06:23,520
‫Bien, de nuevo, para especificar datos geoespaciales con MongoDB,

129
00:06:23,520 --> 00:06:27,500
‫básicamente necesitamos crear un nuevo objeto como lo

130
00:06:27,500 --> 00:06:28,980
‫hicimos aquí.

131
00:06:28,980 --> 00:06:32,290
‫Y ese objeto debe tener al menos dos nombres de campo.

132
00:06:32,290 --> 00:06:35,140
‫Entonces, las coordenadas tienen esta matriz de números y

133
00:06:35,140 --> 00:06:38,010
‫luego el tipo, que debe ser de tipo cadena

134
00:06:38,010 --> 00:06:40,770
‫y debe ser un punto o alguna otra

135
00:06:40,770 --> 00:06:43,670
‫de estas otras geometrías de las que les hablé antes.

136
00:06:43,670 --> 00:06:47,260
‫Bien, y luego, por supuesto, podemos agregar algunos campos más

137
00:06:47,260 --> 00:06:50,840
‫a este objeto como lo hicimos aquí, de acuerdo.

138
00:06:50,840 --> 00:06:53,430
‫Ahora, ¿recuerdas cómo en la última conferencia dijimos

139
00:06:53,430 --> 00:06:55,920
‫cómo íbamos a incrustar todas las ubicaciones en

140
00:06:55,920 --> 00:06:57,650
‫los documentos de la gira?

141
00:06:57,650 --> 00:07:00,600
‫Pero en este momento, startLocation aquí no es realmente

142
00:07:00,600 --> 00:07:02,340
‫un documento en sí mismo.

143
00:07:02,340 --> 00:07:03,590
‫En realidad, es solo

144
00:07:03,590 --> 00:07:06,070
‫un objeto que describe un cierto punto de la tierra.

145
00:07:06,070 --> 00:07:08,520
‫Pero para realmente crear nuevos

146
00:07:08,520 --> 00:07:11,250
‫documentos y luego incrustarlos en otro documento,

147
00:07:11,250 --> 00:07:14,220
‫realmente necesitamos crear una matriz, de acuerdo.

148
00:07:14,220 --> 00:07:17,350
‫Entonces, en realidad, es muy similar a lo que ya tenemos aquí,

149
00:07:17,350 --> 00:07:19,050
‫pero debe ser una matriz.

150
00:07:19,050 --> 00:07:21,743
‫Y eso es lo que haremos con nuestras ubicaciones.

151
00:07:25,190 --> 00:07:28,730
‫Entonces, ubicaciones, y ahora, estoy creando una matriz.

152
00:07:28,730 --> 00:07:31,740
‫Y luego, en esta matriz, es donde

153
00:07:31,740 --> 00:07:35,640
‫voy a especificar el objeto como lo hice antes en startLocation.

154
00:07:35,640 --> 00:07:38,140
‫Bien, y verá cómo se verá

155
00:07:38,140 --> 00:07:41,430
‫esto en un segundo en la aplicación Compass.

156
00:07:41,430 --> 00:07:44,693
‫Bien, y ahora, en realidad es lo mismo que antes.

157
00:07:47,530 --> 00:07:50,220
‫Entonces, recuerde, el tipo de datos geoespaciales debe

158
00:07:50,220 --> 00:07:51,263
‫ser una cadena.

159
00:07:52,640 --> 00:07:54,383
‫El valor predeterminado debe ser el punto.

160
00:07:57,540 --> 00:08:01,323
‫Y además, no puede ser más que un punto, está bien.

161
00:08:02,950 --> 00:08:03,783
‫Así que apunte.

162
00:08:05,610 --> 00:08:09,010
‫Nuevamente, necesitamos las coordenadas como una matriz de números y

163
00:08:11,000 --> 00:08:13,470
‫también, para todas estas otras ubicaciones,

164
00:08:13,470 --> 00:08:16,573
‫aún queremos especificar una dirección y una descripción.

165
00:08:24,550 --> 00:08:28,153
‫Entonces, cadena y aquí, también quiero especificar la fecha,

166
00:08:29,920 --> 00:08:31,250
‫como un número.

167
00:08:31,250 --> 00:08:34,080
‫Y esta fecha será básicamente el día del

168
00:08:34,080 --> 00:08:37,590
‫tour en el que la gente acudirá a este lugar.

169
00:08:37,590 --> 00:08:39,460
‫Ahora, si quisiéramos hacerlo

170
00:08:39,460 --> 00:08:42,530
‫más simple, podríamos eliminar startLocation todos juntos y

171
00:08:42,530 --> 00:08:44,740
‫luego simplemente definir la primera ubicación

172
00:08:44,740 --> 00:08:48,300
‫como startLocation y establecerla en el día número cero.

173
00:08:48,300 --> 00:08:50,960
‫De acuerdo, pero decidí que es

174
00:08:50,960 --> 00:08:53,970
‫bueno tener también startLocation como un campo separado.

175
00:08:53,970 --> 00:08:57,390
‫Bien, así es como se crean los documentos incrustados.

176
00:08:57,390 --> 00:09:01,630
‫Recuerde que siempre necesitamos usar esta matriz, está bien.

177
00:09:01,630 --> 00:09:04,800
‫Y así, al especificar básicamente una matriz de objetos,

178
00:09:04,800 --> 00:09:07,220
‫esto creará documentos nuevos dentro del

179
00:09:07,220 --> 00:09:09,150
‫documento principal, que es, en

180
00:09:09,150 --> 00:09:11,000
‫este caso, el recorrido.

181
00:09:11,000 --> 00:09:13,790
‫Muy bien, ahora, para crear algunas

182
00:09:13,790 --> 00:09:17,080
‫ubicaciones, voy a importar todos nuestros datos originales.

183
00:09:17,080 --> 00:09:19,570
‫Muy bien, en lugar de crear nuevos

184
00:09:19,570 --> 00:09:21,040
‫recorridos, eliminaré los

185
00:09:21,040 --> 00:09:23,610
‫que tenemos y luego importaré los datos completos.

186
00:09:23,610 --> 00:09:25,283
‫Así que aquí, en

187
00:09:26,390 --> 00:09:29,313
‫dev-data, recuerde que antes de importar tours-simple.

188
00:09:30,350 --> 00:09:32,820
‫Bien, este tipo de datos aquí.

189
00:09:32,820 --> 00:09:36,020
‫Pero también tenemos recorridos y esto en

190
00:09:37,818 --> 00:09:41,272
‫realidad tiene las ubicaciones y la ubicación de inicio.

191
00:09:41,272 --> 00:09:43,890
‫Así que no estoy seguro de dónde está esa ubicación de inicio.

192
00:09:43,890 --> 00:09:45,580
‫Ah, aquí está.

193
00:09:45,580 --> 00:09:48,177
‫Así es como especificamos startLocation y

194
00:09:48,177 --> 00:09:51,150
‫verá que tenemos el tipo establecido en punto.

195
00:09:51,150 --> 00:09:53,520
‫Tenemos nuestro conjunto de coordenadas.

196
00:09:53,520 --> 00:09:56,660
‫Y luego, por supuesto, tenemos descripción y dirección.

197
00:09:56,660 --> 00:10:01,000
‫Y luego aquí abajo, en la ubicación, tenemos una matriz, que

198
00:10:01,000 --> 00:10:03,820
‫luego contiene un objeto para cada ubicación.

199
00:10:03,820 --> 00:10:07,550
‫Y ves que en realidad cada uno de ellos tiene su propia identificación.

200
00:10:07,550 --> 00:10:09,260
‫Y estos son realmente

201
00:10:09,260 --> 00:10:11,360
‫documentos y no simples objetos.

202
00:10:11,360 --> 00:10:15,480
‫Muy bien, vayamos aquí a nuestro import-dev-data y

203
00:10:15,480 --> 00:10:18,673
‫reemplacemos esto aquí solo con recorridos.

204
00:10:20,700 --> 00:10:25,000
‫Guárdelo y luego recuerde, primero debemos eliminar y

205
00:10:25,000 --> 00:10:26,133
‫luego importar.

206
00:10:27,060 --> 00:10:29,063
‫Así que vamos a otra consola aquí.

207
00:10:30,140 --> 00:10:32,213
‫Ahora queremos ejecutar node,

208
00:10:33,860 --> 00:10:36,750
‫dev-data y luego importar, en realidad,

209
00:10:36,750 --> 00:10:40,063
‫en la carpeta de datos, y luego importar.

210
00:10:41,520 --> 00:10:46,520
‫Y empiece borrando y esperemos y de hecho, y ahora,

211
00:10:47,790 --> 00:10:48,793
‫importe.

212
00:10:53,500 --> 00:10:55,060
‫Y aquí vamos.

213
00:10:55,060 --> 00:10:56,763
‫Y echemos un vistazo a Compass ahora.

214
00:10:58,680 --> 00:10:59,953
‫Ven a nuestros tours.

215
00:11:01,830 --> 00:11:05,080
‫Y, de hecho, ahora ve startLocation aquí

216
00:11:05,080 --> 00:11:06,660
‫como un objeto.

217
00:11:06,660 --> 00:11:08,500
‫De acuerdo, y cuando lo abres, ves

218
00:11:08,500 --> 00:11:10,730
‫todos los datos que te acabo de mostrar

219
00:11:10,730 --> 00:11:12,390
‫antes en el archivo JSON.

220
00:11:12,390 --> 00:11:15,140
‫Bien, aquí también, las ubicaciones, que ves como una

221
00:11:15,140 --> 00:11:17,200
‫matriz, así que escribe matriz.

222
00:11:17,200 --> 00:11:21,010
‫Y luego allí, tenemos todos estos objetos

223
00:11:21,010 --> 00:11:25,000
‫y cada objeto también tiene su ID de objeto.

224
00:11:25,000 --> 00:11:28,680
‫De acuerdo, y nuevamente, esto es una prueba de que ahora hemos

225
00:11:28,680 --> 00:11:31,450
‫creado, incrustado o desnormalizado conjuntos de datos, de modo

226
00:11:31,450 --> 00:11:34,980
‫que conjuntos de datos que tienen una relación muy cercana con

227
00:11:34,980 --> 00:11:36,810
‫los datos de los recorridos.

228
00:11:36,810 --> 00:11:39,450
‫Y es por eso que decidimos convertirlo realmente

229
00:11:39,450 --> 00:11:42,780
‫en parte de los recorridos en lugar de crear su

230
00:11:42,780 --> 00:11:45,060
‫propia colección solo para ubicaciones, ¿verdad?

231
00:11:45,060 --> 00:11:48,073
‫Así que usaremos esto un poco más adelante

232
00:11:48,073 --> 00:11:52,570
‫en esta sección una vez que comencemos a crear algunas consultas geoespaciales especiales.

233
00:11:52,570 --> 00:11:55,120
‫De acuerdo, y con las consultas geoespaciales, podemos

234
00:11:55,120 --> 00:11:57,300
‫hacer cosas realmente asombrosas como encontrar

235
00:11:57,300 --> 00:12:00,570
‫datos de ubicaciones más cercanas a ciertos puntos o encontrar

236
00:12:00,570 --> 00:12:03,220
‫todas las ubicaciones dentro de un cierto radio

237
00:12:03,220 --> 00:12:04,790
‫o una determinada esfera.

238
00:12:04,790 --> 00:12:09,260
‫Y realmente, las posibilidades son absolutamente infinitas, está bien.

239
00:12:09,260 --> 00:12:11,760
‫Así que solo veremos algunas aplicaciones de esto

240
00:12:11,760 --> 00:12:13,670
‫al final de esta sección

241
00:12:13,670 --> 00:12:16,090
‫porque por ahora, realmente solo quería mostrarles

242
00:12:16,090 --> 00:12:20,183
‫cómo podemos crear conjuntos de datos incrustados tal como lo acabamos de hacer.

