﻿1
00:00:01,130 --> 00:00:02,400
‫Instrutor: Bem-vindo de volta.

2
00:00:02,400 --> 00:00:05,260
‫Então, depois de algumas aulas teóricas mais pesadas,

3
00:00:05,260 --> 00:00:09,210
‫agora, vamos finalmente começar a implementar nosso modelo de dados

4
00:00:09,210 --> 00:00:11,640
‫e começar com os locais.

5
00:00:11,640 --> 00:00:14,080
‫Então, neste vídeo, você aprenderá

6
00:00:14,080 --> 00:00:16,680
‫tudo sobre dados geoespaciais no MongoDB.

7
00:00:16,680 --> 00:00:18,120
‫E este é realmente

8
00:00:18,120 --> 00:00:20,513
‫um tópico que pessoalmente considero muito interessante.

9
00:00:22,170 --> 00:00:24,630
‫Agora, lembre-se da aula anterior

10
00:00:24,630 --> 00:00:27,470
‫que nossos dados de localização serão realmente

11
00:00:27,470 --> 00:00:29,070
‫incorporados aos passeios.

12
00:00:29,070 --> 00:00:31,680
‫Portanto, vamos basicamente declarar tudo o que

13
00:00:31,680 --> 00:00:34,040
‫está relacionado aos locais em nosso

14
00:00:34,040 --> 00:00:35,500
‫modelo de tour.

15
00:00:35,500 --> 00:00:40,320
‫Tudo bem, então vamos abrir esse e bem no

16
00:00:40,320 --> 00:00:43,010
‫final, vamos começar adicionando startLocation.

17
00:00:43,010 --> 00:00:45,660
‫Ok, então teremos startLocation

18
00:00:45,660 --> 00:00:48,520
‫e também locais em geral.

19
00:00:48,520 --> 00:00:52,680
‫Agora, o MongoDB oferece suporte a dados geoespaciais prontos para uso.

20
00:00:52,680 --> 00:00:56,650
‫E os dados geoespaciais são basicamente dados que

21
00:00:56,650 --> 00:01:00,870
‫descrevem lugares na Terra usando coordenadas de longitude e latitude.

22
00:01:00,870 --> 00:01:03,530
‫Ok, então podemos descrever

23
00:01:03,530 --> 00:01:06,350
‫pontos simples ou podemos também descrever

24
00:01:06,350 --> 00:01:11,350
‫geometrias mais complexas como linhas ou mesmo polígonos ou mesmo multipolígonos.

25
00:01:11,350 --> 00:01:13,030
‫Então, realmente, tudo

26
00:01:13,030 --> 00:01:16,140
‫é possível com dados geoespaciais no MongoDB.

27
00:01:16,140 --> 00:01:20,060
‫Ok, então vamos adicionar nosso campo startLocation aqui e

28
00:01:24,350 --> 00:01:27,750
‫então vamos implementar esses dados geoespaciais.

29
00:01:27,750 --> 00:01:32,330
‫E o MongoDB usa um formato de dados especial chamado GeoJSON.

30
00:01:32,330 --> 00:01:33,663
‫Tudo bem, então.

31
00:01:35,080 --> 00:01:39,043
‫GeoJSON, a fim de especificar dados geoespaciais.

32
00:01:40,370 --> 00:01:43,180
‫E agora, como isso realmente funciona?

33
00:01:43,180 --> 00:01:46,130
‫Bem, este objeto que especificamos aqui é, na verdade,

34
00:01:46,130 --> 00:01:49,650
‫desta vez, não para as opções de tipo de esquema como

35
00:01:49,650 --> 00:01:51,963
‫temos, por exemplo, aqui em cima.

36
00:01:52,830 --> 00:01:55,970
‫Portanto, este objeto aqui é para as opções de tipo de esquema.

37
00:01:55,970 --> 00:01:57,190
‫Lembre-se disso?

38
00:01:57,190 --> 00:01:59,960
‫Mas agora, este objeto aqui é na verdade

39
00:01:59,960 --> 00:02:01,300
‫um objeto embutido.

40
00:02:01,300 --> 00:02:02,830
‫E assim, dentro

41
00:02:02,830 --> 00:02:05,310
‫desse objeto, podemos especificar algumas propriedades.

42
00:02:05,310 --> 00:02:08,520
‫Tudo bem, e para que este objeto seja reconhecido

43
00:02:08,520 --> 00:02:11,720
‫como JSON geoespacial, precisamos das propriedades do tipo

44
00:02:11,720 --> 00:02:14,133
‫e das coordenadas, tudo bem.

45
00:02:15,210 --> 00:02:17,340
‫Então, precisamos digitar e

46
00:02:19,270 --> 00:02:21,060
‫coordenar, certo.

47
00:02:21,060 --> 00:02:22,970
‫E agora, cada um

48
00:02:22,970 --> 00:02:26,490
‫desses campos aqui, basicamente, cada um desses subcampos terá suas

49
00:02:26,490 --> 00:02:28,470
‫próprias opções de tipo de esquema.

50
00:02:28,470 --> 00:02:31,830
‫Tudo bem, basicamente aqui, é um pouco aninhado, então temos

51
00:02:31,830 --> 00:02:33,453
‫um nível mais profundo.

52
00:02:34,870 --> 00:02:37,910
‫Ok, então temos as opções de tipo de

53
00:02:37,910 --> 00:02:41,040
‫esquema de tipo e também precisamos de opções de tipo

54
00:02:41,040 --> 00:02:44,660
‫de esquema para coordenadas e novamente, assim como temos aqui nesses

55
00:02:44,660 --> 00:02:47,800
‫outros campos, com a diferença de que agora são subcampos.

56
00:02:47,800 --> 00:02:50,873
‫Portanto, o tipo precisa do tipo

57
00:02:52,070 --> 00:02:52,903
‫de

58
00:02:53,940 --> 00:02:57,880
‫string, certo, e o padrão deve ser o ponto.

59
00:02:57,880 --> 00:03:00,240
‫Então, lembra como eu disse

60
00:03:00,240 --> 00:03:02,647
‫que podemos especificar várias geometrias no MongoDB?

61
00:03:02,647 --> 00:03:04,670
‫E o padrão é sempre apontar.

62
00:03:04,670 --> 00:03:07,990
‫Mas, novamente, também podemos especificar polígonos ou linhas

63
00:03:07,990 --> 00:03:10,380
‫ou outras geometrias como essa.

64
00:03:10,380 --> 00:03:12,310
‫Mas, neste caso, para startLocation, realmente

65
00:03:12,310 --> 00:03:13,910
‫deve ser o ponto.

66
00:03:13,910 --> 00:03:17,060
‫E então vamos realmente tornar essa a única

67
00:03:17,060 --> 00:03:19,283
‫opção possível, especificando o

68
00:03:20,300 --> 00:03:22,703
‫enum, portanto, a propriedade de enumeração.

69
00:03:23,700 --> 00:03:25,800
‫Portanto, lembre-se, podemos especificar um array

70
00:03:25,800 --> 00:03:28,900
‫de todas as opções possíveis que este campo pode

71
00:03:28,900 --> 00:03:33,290
‫assumir e, portanto, neste caso, queremos apenas que seja um ponto, tudo bem.

72
00:03:33,290 --> 00:03:35,580
‫Então fizemos isso em algum lugar aqui.

73
00:03:37,810 --> 00:03:39,750
‫Sim, bem aqui com

74
00:03:39,750 --> 00:03:44,230
‫a dificuldade onde dissemos que só pode ser média ou difícil.

75
00:03:44,230 --> 00:03:46,800
‫Certo, e aqui, estamos fazendo

76
00:03:46,800 --> 00:03:50,380
‫a mesma coisa, mas apenas com uma opção, ok.

77
00:03:50,380 --> 00:03:52,620
‫Portanto, precisamos definir o tipo,

78
00:03:52,620 --> 00:03:55,340
‫lembre-se, e também, uma matriz de coordenadas.

79
00:03:55,340 --> 00:03:59,370
‫Ok, então fazemos isso dizendo o

80
00:03:59,370 --> 00:04:02,470
‫número, mas nessas chaves.

81
00:04:02,470 --> 00:04:05,020
‫Ok, e isso basicamente significa que esperamos

82
00:04:05,020 --> 00:04:07,150
‫um array de números e esse

83
00:04:07,150 --> 00:04:09,910
‫array, como o nome diz, são as coordenadas

84
00:04:09,910 --> 00:04:12,420
‫do ponto com a longitude primeiro e

85
00:04:12,420 --> 00:04:14,450
‫só depois, a latitude.

86
00:04:14,450 --> 00:04:16,290
‫E isso é um

87
00:04:16,290 --> 00:04:18,540
‫pouco contra-intuitivo porque geralmente funciona ao contrário.

88
00:04:18,540 --> 00:04:21,530
‫Mas no GeoJSON, é assim que funciona.

89
00:04:21,530 --> 00:04:24,240
‫Portanto, se você for, por exemplo, ao

90
00:04:24,240 --> 00:04:25,930
‫Google Maps para obter

91
00:04:25,930 --> 00:04:29,560
‫suas coordenadas, verá primeiro a latitude e depois a longitude.

92
00:04:29,560 --> 00:04:31,823
‫Vamos realmente dar uma olhada nisso.

93
00:04:33,500 --> 00:04:34,333
‫Portanto, abra

94
00:04:36,070 --> 00:04:37,273
‫o Maps aqui.

95
00:04:38,570 --> 00:04:40,423
‫Digamos Nova York.

96
00:04:41,860 --> 00:04:44,543
‫Ok, e se agora clicarmos em algum

97
00:04:46,030 --> 00:04:48,520
‫lugar aqui, digamos aqui, então obteremos

98
00:04:48,520 --> 00:04:51,880
‫as coordenadas primeiro com a latitude e, segundo, a longitude.

99
00:04:51,880 --> 00:04:54,960
‫Certo, e caso você não esteja familiarizado com isso, vamos

100
00:04:54,960 --> 00:04:56,993
‫apenas diminuir um pouco o zoom

101
00:04:58,250 --> 00:05:00,760
‫aqui, para que possamos ver a Terra inteira.

102
00:05:00,760 --> 00:05:01,880
‫Nossa, o que é isso?

103
00:05:02,757 --> 00:05:04,220
‫OK.

104
00:05:04,220 --> 00:05:07,610
‫Então, a latitude é basicamente a posição

105
00:05:07,610 --> 00:05:10,680
‫horizontal medida em graus começando no

106
00:05:10,680 --> 00:05:13,280
‫equador, daqui até aqui.

107
00:05:13,280 --> 00:05:15,350
‫Então, no equador, é zero grau

108
00:05:15,350 --> 00:05:18,770
‫e aqui em cima, no Pólo Norte, é 90 graus.

109
00:05:18,770 --> 00:05:19,980
‫E então

110
00:05:19,980 --> 00:05:23,150
‫a longitude é a mesma coisa, mas verticalmente.

111
00:05:23,150 --> 00:05:27,440
‫Então é a posição começando de um meridiano, que

112
00:05:27,440 --> 00:05:30,850
‫passa em algum lugar aqui, certo.

113
00:05:30,850 --> 00:05:33,410
‫E então a longitude é a posição

114
00:05:33,410 --> 00:05:34,960
‫vertical a partir daqui.

115
00:05:34,960 --> 00:05:37,783
‫E é por isso que este ponto aqui que

116
00:05:40,150 --> 00:05:41,183
‫temos, em

117
00:05:42,070 --> 00:05:45,400
‫algum lugar aqui, em algum lugar aqui em Manhattan, tem

118
00:05:45,400 --> 00:05:48,380
‫uma latitude de 40 e uma longitude de -73.

119
00:05:48,380 --> 00:05:49,650
‫Tudo bem.

120
00:05:49,650 --> 00:05:54,540
‫De qualquer forma, vamos voltar ao nosso código aqui, é claro,

121
00:05:54,540 --> 00:05:58,653
‫porque também quero especificar uma propriedade para o endereço.

122
00:06:01,060 --> 00:06:05,600
‫Então adicione outra string e também uma descrição deste

123
00:06:05,600 --> 00:06:07,457
‫startLocation e de

124
00:06:08,890 --> 00:06:12,070
‫novo, como uma string, tudo bem.

125
00:06:12,070 --> 00:06:14,060
‫E não vamos dizer

126
00:06:14,060 --> 00:06:16,930
‫que qualquer um desses campos deve ser

127
00:06:16,930 --> 00:06:19,490
‫obrigatório porque queremos deixar startLocation em branco.

128
00:06:19,490 --> 00:06:23,520
‫Ok, novamente, para especificar dados geoespaciais com MongoDB,

129
00:06:23,520 --> 00:06:27,500
‫basicamente precisamos criar um novo objeto, como

130
00:06:27,500 --> 00:06:28,980
‫fizemos aqui.

131
00:06:28,980 --> 00:06:32,290
‫E esse objeto precisa ter pelo menos dois nomes de campo.

132
00:06:32,290 --> 00:06:35,140
‫Portanto, as coordenadas tem essa matriz de números

133
00:06:35,140 --> 00:06:38,010
‫e, em seguida, o tipo, que deve ser do

134
00:06:38,010 --> 00:06:40,770
‫tipo string e deve ser ponto ou

135
00:06:40,770 --> 00:06:43,670
‫alguma outra dessas geometrias que acabei de falar antes.

136
00:06:43,670 --> 00:06:47,260
‫Ok, podemos então, é claro, adicionar mais alguns campos

137
00:06:47,260 --> 00:06:50,840
‫a este objeto, como fizemos aqui, certo.

138
00:06:50,840 --> 00:06:53,430
‫Agora, lembra como na última palestra nós

139
00:06:53,430 --> 00:06:55,920
‫dissemos que íamos incorporar todos os locais

140
00:06:55,920 --> 00:06:57,650
‫aos documentos da turnê?

141
00:06:57,650 --> 00:07:00,600
‫Mas agora, o startLocation aqui não é

142
00:07:00,600 --> 00:07:02,340
‫realmente um documento.

143
00:07:02,340 --> 00:07:03,590
‫Na verdade, é apenas

144
00:07:03,590 --> 00:07:06,070
‫um objeto que descreve um determinado ponto da Terra.

145
00:07:06,070 --> 00:07:08,520
‫Mas para realmente criar novos

146
00:07:08,520 --> 00:07:11,250
‫documentos e, em seguida, incorporá-los em

147
00:07:11,250 --> 00:07:14,220
‫outro documento, precisamos criar um array, certo.

148
00:07:14,220 --> 00:07:17,350
‫Na verdade, é muito semelhante ao que já temos aqui,

149
00:07:17,350 --> 00:07:19,050
‫mas precisa ser um array.

150
00:07:19,050 --> 00:07:21,743
‫E é isso que faremos com nossos locais.

151
00:07:25,190 --> 00:07:28,730
‫Então, locais, e agora, estou criando um array.

152
00:07:28,730 --> 00:07:31,740
‫E então neste array é onde

153
00:07:31,740 --> 00:07:35,640
‫vou especificar o objeto como fiz antes em startLocation.

154
00:07:35,640 --> 00:07:38,140
‫Ok, e você verá como

155
00:07:38,140 --> 00:07:41,430
‫isso ficará em um segundo no aplicativo Compass.

156
00:07:41,430 --> 00:07:44,693
‫Ok, e agora é exatamente o mesmo de antes.

157
00:07:47,530 --> 00:07:50,220
‫Portanto, o tipo, lembre-se, de dados geoespaciais precisa

158
00:07:50,220 --> 00:07:51,263
‫ser string.

159
00:07:52,640 --> 00:07:54,383
‫O padrão precisa ser um ponto.

160
00:07:57,540 --> 00:08:01,323
‫E também, não pode ser nada além de um ponto, certo.

161
00:08:02,950 --> 00:08:03,783
‫Então aponte.

162
00:08:05,610 --> 00:08:09,010
‫Novamente, precisamos das coordenadas como uma matriz de números e

163
00:08:11,000 --> 00:08:13,470
‫também, para todas essas outras localizações,

164
00:08:13,470 --> 00:08:16,573
‫ainda queremos especificar um endereço e uma descrição.

165
00:08:24,550 --> 00:08:28,153
‫Então string e aqui, eu também quero especificar a data, então

166
00:08:29,920 --> 00:08:31,250
‫como um número.

167
00:08:31,250 --> 00:08:34,080
‫E esta data será basicamente o dia

168
00:08:34,080 --> 00:08:37,590
‫do tour em que as pessoas irão para este local.

169
00:08:37,590 --> 00:08:39,460
‫Agora, se quisermos torná-lo

170
00:08:39,460 --> 00:08:42,530
‫mais simples, poderíamos excluir o startLocation todos juntos e,

171
00:08:42,530 --> 00:08:44,740
‫em seguida, simplesmente definir o primeiro

172
00:08:44,740 --> 00:08:48,300
‫local como startLocation e configurá-lo para o dia número zero.

173
00:08:48,300 --> 00:08:50,960
‫Tudo bem, mas decidi que é

174
00:08:50,960 --> 00:08:53,970
‫bom também ter startLocation como um campo separado.

175
00:08:53,970 --> 00:08:57,390
‫Ok, então é assim que você cria documentos incorporados.

176
00:08:57,390 --> 00:09:01,630
‫Lembre-se de que sempre precisamos usar este array, ok.

177
00:09:01,630 --> 00:09:04,800
‫E assim, especificando basicamente uma matriz de objetos,

178
00:09:04,800 --> 00:09:07,220
‫isso criará novos documentos dentro do

179
00:09:07,220 --> 00:09:09,150
‫documento pai, que é, neste

180
00:09:09,150 --> 00:09:11,000
‫caso, o passeio.

181
00:09:11,000 --> 00:09:13,790
‫Tudo bem, agora, para criar alguns locais,

182
00:09:13,790 --> 00:09:17,080
‫na verdade irei importar todos os nossos dados originais.

183
00:09:17,080 --> 00:09:19,570
‫Tudo bem, então, em vez de criar

184
00:09:19,570 --> 00:09:21,040
‫novos passeios, irei deletar

185
00:09:21,040 --> 00:09:23,610
‫os que temos e importar os dados completos.

186
00:09:23,610 --> 00:09:25,283
‫Então aqui, em dev-data,

187
00:09:26,390 --> 00:09:29,313
‫lembre-se disso antes de importarmos tours simples.

188
00:09:30,350 --> 00:09:32,820
‫Ok, então este tipo de dados aqui.

189
00:09:32,820 --> 00:09:36,020
‫Mas também temos tours e

190
00:09:37,818 --> 00:09:41,272
‫isso contém os locais e o startLocation.

191
00:09:41,272 --> 00:09:43,890
‫Portanto, não tenho certeza de onde esse startLocation está.

192
00:09:43,890 --> 00:09:45,580
‫Ah, aqui está.

193
00:09:45,580 --> 00:09:48,177
‫Portanto, é assim que especificamos startLocation

194
00:09:48,177 --> 00:09:51,150
‫e você verá que definimos o tipo para apontar.

195
00:09:51,150 --> 00:09:53,520
‫Temos nosso conjunto de coordenadas.

196
00:09:53,520 --> 00:09:56,660
‫E então, é claro, temos a descrição e o endereço.

197
00:09:56,660 --> 00:10:01,000
‫E aqui embaixo, no local, temos um array, que contém

198
00:10:01,000 --> 00:10:03,820
‫um objeto para cada local.

199
00:10:03,820 --> 00:10:07,550
‫E você vê que, na verdade, cada um deles tem seu próprio id.

200
00:10:07,550 --> 00:10:09,260
‫E então esses são

201
00:10:09,260 --> 00:10:11,360
‫realmente documentos e não apenas objetos simples.

202
00:10:11,360 --> 00:10:15,480
‫Tudo bem, então vamos aqui para o nosso import-dev-data e

203
00:10:15,480 --> 00:10:18,673
‫substitua isso aqui apenas com tours.

204
00:10:20,700 --> 00:10:25,000
‫Salve-o e lembre-se, primeiro precisamos excluir e depois

205
00:10:25,000 --> 00:10:26,133
‫importar.

206
00:10:27,060 --> 00:10:29,063
‫Então, indo para outro console aqui.

207
00:10:30,140 --> 00:10:32,213
‫Agora queremos executar o

208
00:10:33,860 --> 00:10:36,750
‫node, dev-data e, em seguida, importar, na

209
00:10:36,750 --> 00:10:40,063
‫verdade, na pasta de dados e, em seguida, importar.

210
00:10:41,520 --> 00:10:46,520
‫E comece excluindo e vamos aguardar e, de fato, e

211
00:10:47,790 --> 00:10:48,793
‫agora, importar.

212
00:10:53,500 --> 00:10:55,060
‫E aqui vamos nós.

213
00:10:55,060 --> 00:10:56,763
‫E vamos verificar o Compass agora.

214
00:10:58,680 --> 00:10:59,953
‫Venha para nossos passeios.

215
00:11:01,830 --> 00:11:05,080
‫E então, de fato, agora você vê startLocation aqui

216
00:11:05,080 --> 00:11:06,660
‫como um objeto.

217
00:11:06,660 --> 00:11:08,500
‫Ok, e quando você abre isso, você

218
00:11:08,500 --> 00:11:10,730
‫vê todos os dados que acabei de mostrar

219
00:11:10,730 --> 00:11:12,390
‫a você no arquivo JSON.

220
00:11:12,390 --> 00:11:15,140
‫Certo, então aqui também as localizações, que você vê

221
00:11:15,140 --> 00:11:17,200
‫como um array, então digite array.

222
00:11:17,200 --> 00:11:21,010
‫E aí, temos todos esses objetos e

223
00:11:21,010 --> 00:11:25,000
‫cada objeto também tem seu id de objeto.

224
00:11:25,000 --> 00:11:28,680
‫Ok, e novamente, esta é a prova de que agora criamos,

225
00:11:28,680 --> 00:11:31,450
‫incorporamos ou desnormalizados conjuntos de dados, ou seja,

226
00:11:31,450 --> 00:11:34,980
‫conjuntos de dados que têm uma relação muito próxima com

227
00:11:34,980 --> 00:11:36,810
‫os dados dos passeios.

228
00:11:36,810 --> 00:11:39,450
‫E é por isso que optamos por

229
00:11:39,450 --> 00:11:42,780
‫realmente torná-lo parte dos passeios em vez de criar sua

230
00:11:42,780 --> 00:11:45,060
‫própria coleção apenas para locais, certo.

231
00:11:45,060 --> 00:11:48,073
‫Na verdade, usaremos isso um pouco mais tarde

232
00:11:48,073 --> 00:11:52,570
‫nesta seção, uma vez que começarmos a criar algumas consultas geoespaciais especiais.

233
00:11:52,570 --> 00:11:55,120
‫Ok, e com as consultas geoespaciais, podemos

234
00:11:55,120 --> 00:11:57,300
‫fazer coisas realmente incríveis, como encontrar

235
00:11:57,300 --> 00:12:00,570
‫dados de locais mais próximos de certos pontos ou

236
00:12:00,570 --> 00:12:03,220
‫encontrar todos os locais dentro de um determinado

237
00:12:03,220 --> 00:12:04,790
‫raio ou esfera.

238
00:12:04,790 --> 00:12:09,260
‫E realmente, as possibilidades são absolutamente infinitas, ok.

239
00:12:09,260 --> 00:12:11,760
‫Portanto, veremos apenas algumas aplicações disso no

240
00:12:11,760 --> 00:12:13,670
‫final desta seção porque, por

241
00:12:13,670 --> 00:12:16,090
‫enquanto, eu realmente queria mostrar a vocês

242
00:12:16,090 --> 00:12:20,183
‫como podemos criar conjuntos de dados incorporados da mesma forma que fizemos.

