﻿1
00:00:01,130 --> 00:00:02,400
‫Istruttore: Bentornato.

2
00:00:02,400 --> 00:00:05,260
‫Quindi, dopo alcune lezioni teoriche più pesanti,

3
00:00:05,260 --> 00:00:09,210
‫ora, inizieremo finalmente a implementare il nostro modello di dati

4
00:00:09,210 --> 00:00:11,640
‫e a partire dalle posizioni.

5
00:00:11,640 --> 00:00:14,080
‫Quindi in questo video imparerai

6
00:00:14,080 --> 00:00:16,680
‫tutto sui dati geospaziali in MongoDB.

7
00:00:16,680 --> 00:00:18,120
‫E questo è davvero

8
00:00:18,120 --> 00:00:20,513
‫un argomento che personalmente trovo davvero eccitante.

9
00:00:22,170 --> 00:00:24,630
‫Ora, ricorda dalla lezione precedente che

10
00:00:24,630 --> 00:00:27,470
‫i nostri dati sulla posizione saranno effettivamente

11
00:00:27,470 --> 00:00:29,070
‫incorporati nei tour.

12
00:00:29,070 --> 00:00:31,680
‫E quindi, fondamentalmente dichiareremo tutto ciò che

13
00:00:31,680 --> 00:00:34,040
‫è correlato alle località nel nostro

14
00:00:34,040 --> 00:00:35,500
‫modello di tour.

15
00:00:35,500 --> 00:00:40,320
‫Va bene, quindi apriamolo e proprio alla fine,

16
00:00:40,320 --> 00:00:43,010
‫iniziamo aggiungendo startLocation.

17
00:00:43,010 --> 00:00:45,660
‫Ok, quindi avremo startLocation

18
00:00:45,660 --> 00:00:48,520
‫e poi anche location in generale.

19
00:00:48,520 --> 00:00:52,680
‫Ora MongoDB supporta i dati geospaziali immediatamente.

20
00:00:52,680 --> 00:00:56,650
‫E i dati geospaziali sono fondamentalmente dati che descrivono

21
00:00:56,650 --> 00:01:00,870
‫i luoghi sulla terra usando le coordinate di longitudine e latitudine.

22
00:01:00,870 --> 00:01:03,530
‫Ok, quindi possiamo descrivere

23
00:01:03,530 --> 00:01:06,350
‫punti semplici o possiamo anche descrivere

24
00:01:06,350 --> 00:01:11,350
‫geometrie più complesse come linee o anche poligoni o anche multi-poligoni.

25
00:01:11,350 --> 00:01:13,030
‫Quindi, davvero, tutto

26
00:01:13,030 --> 00:01:16,140
‫è possibile con i dati geospaziali in MongoDB.

27
00:01:16,140 --> 00:01:20,060
‫Ok, aggiungiamo qui il nostro campo startLocation

28
00:01:24,350 --> 00:01:27,750
‫e poi implementiamo questi dati geospaziali.

29
00:01:27,750 --> 00:01:32,330
‫E MongoDB utilizza un formato dati speciale chiamato GeoJSON.

30
00:01:32,330 --> 00:01:33,663
‫Va bene, quindi.

31
00:01:35,080 --> 00:01:39,043
‫GeoJSON, per specificare i dati geospaziali.

32
00:01:40,370 --> 00:01:43,180
‫E ora, come funziona davvero?

33
00:01:43,180 --> 00:01:46,130
‫Bene, questo oggetto che abbiamo specificato qui è in

34
00:01:46,130 --> 00:01:49,650
‫realtà, questa volta, non per le opzioni del tipo di schema

35
00:01:49,650 --> 00:01:51,963
‫come lo abbiamo, ad esempio, qui.

36
00:01:52,830 --> 00:01:55,970
‫Quindi questo oggetto qui è per le opzioni del tipo di schema.

37
00:01:55,970 --> 00:01:57,190
‫Ricordati che?

38
00:01:57,190 --> 00:01:59,960
‫Ma ora, questo oggetto qui è in realtà

39
00:01:59,960 --> 00:02:01,300
‫un oggetto incorporato.

40
00:02:01,300 --> 00:02:02,830
‫E così all'interno di

41
00:02:02,830 --> 00:02:05,310
‫questo oggetto, possiamo specificare un paio di proprietà.

42
00:02:05,310 --> 00:02:08,520
‫Va bene, e affinché questo oggetto venga riconosciuto come

43
00:02:08,520 --> 00:02:11,720
‫JSON geospaziale, abbiamo bisogno del tipo e delle

44
00:02:11,720 --> 00:02:14,133
‫proprietà delle coordinate, va bene.

45
00:02:15,210 --> 00:02:17,340
‫Quindi abbiamo bisogno di tipo e abbiamo

46
00:02:19,270 --> 00:02:21,060
‫bisogno di coordinate, va bene.

47
00:02:21,060 --> 00:02:22,970
‫E così ora, ognuno di

48
00:02:22,970 --> 00:02:26,490
‫questi campi qui, quindi in pratica, ognuno di questi sottocampi otterrà

49
00:02:26,490 --> 00:02:28,470
‫le proprie opzioni del tipo di schema.

50
00:02:28,470 --> 00:02:31,830
‫Va bene, quindi in pratica qui è un po' annidato, quindi

51
00:02:31,830 --> 00:02:33,453
‫abbiamo un livello più profondo.

52
00:02:34,870 --> 00:02:37,910
‫Ok, quindi abbiamo le opzioni del tipo di schema

53
00:02:37,910 --> 00:02:41,040
‫del tipo e poi abbiamo anche bisogno delle opzioni del

54
00:02:41,040 --> 00:02:44,660
‫tipo di schema per le coordinate e ancora, proprio come abbiamo qui in

55
00:02:44,660 --> 00:02:47,800
‫questi altri campi con la differenza che questi ora sono sottocampi.

56
00:02:47,800 --> 00:02:50,873
‫Quindi type ha bisogno del tipo

57
00:02:52,070 --> 00:02:52,903
‫di

58
00:02:53,940 --> 00:02:57,880
‫stringa, va bene, e l'impostazione predefinita dovrebbe essere point.

59
00:02:57,880 --> 00:03:00,240
‫Quindi ricorda come ho detto

60
00:03:00,240 --> 00:03:02,647
‫che possiamo specificare più geometrie in MongoDB?

61
00:03:02,647 --> 00:03:04,670
‫E quello predefinito è sempre il punto.

62
00:03:04,670 --> 00:03:07,990
‫Ma ancora una volta, potremmo anche specificare poligoni o

63
00:03:07,990 --> 00:03:10,380
‫linee o altre geometrie del genere.

64
00:03:10,380 --> 00:03:12,310
‫Ma in questo caso, per startLocation, dovrebbe

65
00:03:12,310 --> 00:03:13,910
‫davvero essere un punto.

66
00:03:13,910 --> 00:03:17,060
‫E quindi rendiamo effettivamente questa l'unica opzione

67
00:03:17,060 --> 00:03:19,283
‫possibile specificando l'enum,

68
00:03:20,300 --> 00:03:22,703
‫quindi la proprietà di enumerazione.

69
00:03:23,700 --> 00:03:25,800
‫Quindi ricorda, possiamo specificare un array

70
00:03:25,800 --> 00:03:28,900
‫di tutte le possibili opzioni che questo campo può

71
00:03:28,900 --> 00:03:33,290
‫assumere e quindi in questo caso, vogliamo solo che sia punto, va bene.

72
00:03:33,290 --> 00:03:35,580
‫Quindi l'abbiamo fatto da qualche parte quassù.

73
00:03:37,810 --> 00:03:39,750
‫Sì, proprio qui con la

74
00:03:39,750 --> 00:03:44,230
‫difficoltà in cui abbiamo detto che può essere solo media o difficile.

75
00:03:44,230 --> 00:03:46,800
‫Giusto, quindi qui stiamo facendo

76
00:03:46,800 --> 00:03:50,380
‫la stessa cosa, ma solo con un'opzione, ok.

77
00:03:50,380 --> 00:03:52,620
‫Quindi dobbiamo definire il tipo,

78
00:03:52,620 --> 00:03:55,340
‫ricordare e anche un array di coordinate.

79
00:03:55,340 --> 00:03:59,370
‫Ok, quindi lo facciamo dicendo il numero, ma

80
00:03:59,370 --> 00:04:02,470
‫poi tra queste parentesi graffe.

81
00:04:02,470 --> 00:04:05,020
‫Ok, quindi questo significa sostanzialmente che ci aspettiamo

82
00:04:05,020 --> 00:04:07,150
‫un array di numeri e questo

83
00:04:07,150 --> 00:04:09,910
‫array, come dice il nome, sono le coordinate

84
00:04:09,910 --> 00:04:12,420
‫del punto con prima la longitudine e

85
00:04:12,420 --> 00:04:14,450
‫solo la seconda, la latitudine.

86
00:04:14,450 --> 00:04:16,290
‫E quindi è un po'

87
00:04:16,290 --> 00:04:18,540
‫controintuitivo perché di solito funziona al contrario.

88
00:04:18,540 --> 00:04:21,530
‫Ma in GeoJSON, è proprio così che funziona.

89
00:04:21,530 --> 00:04:24,240
‫Quindi, se dovessi andare, ad esempio, su Google

90
00:04:24,240 --> 00:04:25,930
‫Maps per ottenere le

91
00:04:25,930 --> 00:04:29,560
‫tue coordinate, vedrai prima la latitudine e poi la longitudine.

92
00:04:29,560 --> 00:04:31,823
‫Diamo un'occhiata a questo.

93
00:04:33,500 --> 00:04:34,333
‫Quindi

94
00:04:36,070 --> 00:04:37,273
‫apri Maps qui.

95
00:04:38,570 --> 00:04:40,423
‫Diciamo New York.

96
00:04:41,860 --> 00:04:44,543
‫Ok, e se ora clicchiamo da qualche

97
00:04:46,030 --> 00:04:48,520
‫parte qui, diciamo qui, otteniamo prima

98
00:04:48,520 --> 00:04:51,880
‫le coordinate con la latitudine e poi la longitudine.

99
00:04:51,880 --> 00:04:54,960
‫Va bene, e nel caso tu non abbia familiarità

100
00:04:54,960 --> 00:04:56,993
‫con questo, rimpiccioliamo un

101
00:04:58,250 --> 00:05:00,760
‫po' qui, così possiamo vedere l'intera terra.

102
00:05:00,760 --> 00:05:01,880
‫Wow, cos'è quello?

103
00:05:02,757 --> 00:05:04,220
‫Va bene.

104
00:05:04,220 --> 00:05:07,610
‫Quindi la latitudine è sostanzialmente la posizione orizzontale

105
00:05:07,610 --> 00:05:10,680
‫misurata in gradi a partire dall'equatore,

106
00:05:10,680 --> 00:05:13,280
‫quindi da qui a quassù.

107
00:05:13,280 --> 00:05:15,350
‫Quindi all'equatore ci sono zero

108
00:05:15,350 --> 00:05:18,770
‫gradi e quassù, al Polo Nord, ci sono 90 gradi.

109
00:05:18,770 --> 00:05:19,980
‫E poi la

110
00:05:19,980 --> 00:05:23,150
‫longitudine è la stessa cosa, ma in verticale.

111
00:05:23,150 --> 00:05:27,440
‫Quindi è la posizione che parte da un meridiano,

112
00:05:27,440 --> 00:05:30,850
‫che passa da qualche parte qui, ok.

113
00:05:30,850 --> 00:05:33,410
‫E quindi la longitudine è la posizione verticale

114
00:05:33,410 --> 00:05:34,960
‫che inizia da qui.

115
00:05:34,960 --> 00:05:37,783
‫Ed ecco perché questo punto qui che abbiamo,

116
00:05:40,150 --> 00:05:41,183
‫da qualche

117
00:05:42,070 --> 00:05:45,400
‫parte qui, da qualche parte qui a Manhattan, ha una

118
00:05:45,400 --> 00:05:48,380
‫latitudine di 40 e una longitudine di -73.

119
00:05:48,380 --> 00:05:49,650
‫Va bene.

120
00:05:49,650 --> 00:05:54,540
‫Ma comunque, torniamo al nostro codice qui, ovviamente, perché

121
00:05:54,540 --> 00:05:58,653
‫voglio anche specificare una proprietà per l'indirizzo.

122
00:06:01,060 --> 00:06:05,600
‫Quindi aggiungi un'altra stringa e poi anche una descrizione di

123
00:06:05,600 --> 00:06:07,457
‫questa startLocation e quella

124
00:06:08,890 --> 00:06:12,070
‫di nuovo, come una stringa, va bene.

125
00:06:12,070 --> 00:06:14,060
‫E non diremo che

126
00:06:14,060 --> 00:06:16,930
‫nessuno di questi campi dovrebbe essere richiesto perché

127
00:06:16,930 --> 00:06:19,490
‫vogliamo essere autorizzati a lasciare vuoto startLocation.

128
00:06:19,490 --> 00:06:23,520
‫Ok, ancora una volta, per specificare i dati geospaziali con

129
00:06:23,520 --> 00:06:27,500
‫MongoDB, abbiamo fondamentalmente bisogno di creare un nuovo oggetto come

130
00:06:27,500 --> 00:06:28,980
‫abbiamo fatto qui.

131
00:06:28,980 --> 00:06:32,290
‫E quell'oggetto deve quindi avere almeno due nomi di campo.

132
00:06:32,290 --> 00:06:35,140
‫Quindi le coordinate hanno questa matrice di numeri e

133
00:06:35,140 --> 00:06:38,010
‫quindi il tipo, che dovrebbe essere di tipo stringa

134
00:06:38,010 --> 00:06:40,770
‫e dovrebbe essere un punto o un'altra di

135
00:06:40,770 --> 00:06:43,670
‫queste altre geometrie di cui ti ho appena parlato prima.

136
00:06:43,670 --> 00:06:47,260
‫Ok, e possiamo ovviamente aggiungere altri campi a questo

137
00:06:47,260 --> 00:06:50,840
‫oggetto come abbiamo fatto qui, va bene.

138
00:06:50,840 --> 00:06:53,430
‫Ora, ricordi come nell'ultima conferenza abbiamo detto

139
00:06:53,430 --> 00:06:55,920
‫come avremmo integrato tutte le location

140
00:06:55,920 --> 00:06:57,650
‫nei documenti del tour?

141
00:06:57,650 --> 00:07:00,600
‫Ma in questo momento, startLocation qui non è davvero

142
00:07:00,600 --> 00:07:02,340
‫un documento in sé.

143
00:07:02,340 --> 00:07:03,590
‫In realtà è solo

144
00:07:03,590 --> 00:07:06,070
‫un oggetto che descrive un certo punto sulla terra.

145
00:07:06,070 --> 00:07:08,520
‫Ma per creare davvero nuovi documenti

146
00:07:08,520 --> 00:07:11,250
‫e poi incorporarli in un altro documento,

147
00:07:11,250 --> 00:07:14,220
‫abbiamo effettivamente bisogno di creare un array, va bene.

148
00:07:14,220 --> 00:07:17,350
‫Quindi in realtà è molto simile a quello che abbiamo già qui,

149
00:07:17,350 --> 00:07:19,050
‫ma deve essere un array.

150
00:07:19,050 --> 00:07:21,743
‫Ed è quello che faremo con le nostre sedi.

151
00:07:25,190 --> 00:07:28,730
‫Quindi posizioni, e ora sto creando un array.

152
00:07:28,730 --> 00:07:31,740
‫E poi in questo array è

153
00:07:31,740 --> 00:07:35,640
‫dove specificherò l'oggetto come ho fatto prima in startLocation.

154
00:07:35,640 --> 00:07:38,140
‫Ok, e vedrai come

155
00:07:38,140 --> 00:07:41,430
‫apparirà in un secondo nell'applicazione Compass.

156
00:07:41,430 --> 00:07:44,693
‫Ok, e quindi ora, in realtà è più o meno lo stesso di prima.

157
00:07:47,530 --> 00:07:50,220
‫Quindi il tipo, ricorda, per i dati geospaziali

158
00:07:50,220 --> 00:07:51,263
‫deve essere stringa.

159
00:07:52,640 --> 00:07:54,383
‫L'impostazione predefinita deve essere punto.

160
00:07:57,540 --> 00:08:01,323
‫E inoltre, non può essere altro che un punto, ok.

161
00:08:02,950 --> 00:08:03,783
‫Quindi punto.

162
00:08:05,610 --> 00:08:09,010
‫Ancora una volta, abbiamo bisogno delle coordinate come un array di

163
00:08:11,000 --> 00:08:13,470
‫numeri e inoltre, per tutte queste altre

164
00:08:13,470 --> 00:08:16,573
‫posizioni, vogliamo ancora specificare un indirizzo e una descrizione.

165
00:08:24,550 --> 00:08:28,153
‫Quindi stringa e qui, voglio anche specificare la data, quindi

166
00:08:29,920 --> 00:08:31,250
‫come un numero.

167
00:08:31,250 --> 00:08:34,080
‫E questa data sarà sostanzialmente il giorno

168
00:08:34,080 --> 00:08:37,590
‫del tour in cui le persone andranno in questo luogo.

169
00:08:37,590 --> 00:08:39,460
‫Ora, se volessimo renderlo

170
00:08:39,460 --> 00:08:42,530
‫più semplice, potremmo eliminare lo startLocation tutti insieme

171
00:08:42,530 --> 00:08:44,740
‫e quindi definire semplicemente la prima

172
00:08:44,740 --> 00:08:48,300
‫posizione come startLocation e impostarlo sul giorno numero zero.

173
00:08:48,300 --> 00:08:50,960
‫Va bene, ma ho deciso che

174
00:08:50,960 --> 00:08:53,970
‫è bello avere anche startLocation come campo separato.

175
00:08:53,970 --> 00:08:57,390
‫Ok, è così che crei documenti incorporati.

176
00:08:57,390 --> 00:09:01,630
‫Ricorda che dobbiamo sempre usare questo array, ok.

177
00:09:01,630 --> 00:09:04,800
‫Quindi, specificando fondamentalmente un array di oggetti, questo

178
00:09:04,800 --> 00:09:07,220
‫creerà quindi nuovi documenti all'interno del

179
00:09:07,220 --> 00:09:09,150
‫documento genitore, che è, in

180
00:09:09,150 --> 00:09:11,000
‫questo caso, il tour.

181
00:09:11,000 --> 00:09:13,790
‫Bene, ora, per creare alcune

182
00:09:13,790 --> 00:09:17,080
‫posizioni, importerò tutti i nostri dati originali.

183
00:09:17,080 --> 00:09:19,570
‫Va bene, quindi invece di creare nuovi

184
00:09:19,570 --> 00:09:21,040
‫tour, eliminerò quelli

185
00:09:21,040 --> 00:09:23,610
‫che abbiamo e poi importerò i dati completi.

186
00:09:23,610 --> 00:09:25,283
‫Quindi qui, in dev-data,

187
00:09:26,390 --> 00:09:29,313
‫ricorda che prima di importare i tour, è semplice.

188
00:09:30,350 --> 00:09:32,820
‫Ok, quindi questo tipo di dati qui.

189
00:09:32,820 --> 00:09:36,020
‫Ma abbiamo anche tour e questo

190
00:09:37,818 --> 00:09:41,272
‫ha effettivamente le posizioni e la posizione iniziale.

191
00:09:41,272 --> 00:09:43,890
‫Quindi non sono sicuro di dove sia startLocation.

192
00:09:43,890 --> 00:09:45,580
‫Ah, eccolo qui.

193
00:09:45,580 --> 00:09:48,177
‫Quindi è così che specifichiamo startLocation

194
00:09:48,177 --> 00:09:51,150
‫e vedi che abbiamo il tipo impostato su point.

195
00:09:51,150 --> 00:09:53,520
‫Abbiamo la nostra serie di coordinate.

196
00:09:53,520 --> 00:09:56,660
‫E poi, naturalmente, abbiamo la descrizione e l'indirizzo.

197
00:09:56,660 --> 00:10:01,000
‫E poi quaggiù, nella posizione, abbiamo un array, che contiene

198
00:10:01,000 --> 00:10:03,820
‫quindi un oggetto per ogni posizione.

199
00:10:03,820 --> 00:10:07,550
‫E vedi che in realtà ognuno di loro ottiene il proprio ID.

200
00:10:07,550 --> 00:10:09,260
‫E quindi questi sono

201
00:10:09,260 --> 00:10:11,360
‫davvero documenti e non semplici oggetti.

202
00:10:11,360 --> 00:10:15,480
‫Va bene, quindi andiamo qui ai nostri dati di importazione-sviluppo

203
00:10:15,480 --> 00:10:18,673
‫e sostituiamolo qui solo con i tour.

204
00:10:20,700 --> 00:10:25,000
‫Dagli un salvataggio e poi ricorda, dobbiamo prima eliminare e

205
00:10:25,000 --> 00:10:26,133
‫poi importare.

206
00:10:27,060 --> 00:10:29,063
‫Quindi andando su un'altra console qui.

207
00:10:30,140 --> 00:10:32,213
‫Ora vogliamo eseguire node,

208
00:10:33,860 --> 00:10:36,750
‫dev-data e quindi importare, quindi in

209
00:10:36,750 --> 00:10:40,063
‫realtà, nella cartella dei dati, quindi importare.

210
00:10:41,520 --> 00:10:46,520
‫E inizia eliminando e aspettiamo e anzi, e ora,

211
00:10:47,790 --> 00:10:48,793
‫importa.

212
00:10:53,500 --> 00:10:55,060
‫E qui andiamo.

213
00:10:55,060 --> 00:10:56,763
‫E ora diamo un'occhiata a Compass.

214
00:10:58,680 --> 00:10:59,953
‫Vieni ai nostri tour.

215
00:11:01,830 --> 00:11:05,080
‫E così in effetti, ora vedi startLocation qui

216
00:11:05,080 --> 00:11:06,660
‫come un oggetto.

217
00:11:06,660 --> 00:11:08,500
‫Ok, e quando lo apri, vedi

218
00:11:08,500 --> 00:11:10,730
‫tutti i dati che ti ho appena mostrato

219
00:11:10,730 --> 00:11:12,390
‫prima nel file JSON.

220
00:11:12,390 --> 00:11:15,140
‫Bene, allora anche qui le posizioni, che vedi come

221
00:11:15,140 --> 00:11:17,200
‫un array, quindi digita array.

222
00:11:17,200 --> 00:11:21,010
‫E poi lì dentro, abbiamo tutti questi oggetti

223
00:11:21,010 --> 00:11:25,000
‫e ogni oggetto ha anche il suo ID oggetto.

224
00:11:25,000 --> 00:11:28,680
‫Ok, e di nuovo, questa è la prova che ora abbiamo

225
00:11:28,680 --> 00:11:31,450
‫creato, incorporato o denormalizzato set di dati, quindi

226
00:11:31,450 --> 00:11:34,980
‫set di dati che hanno una relazione molto stretta con

227
00:11:34,980 --> 00:11:36,810
‫i dati dei tour.

228
00:11:36,810 --> 00:11:39,450
‫Ed è per questo che abbiamo scelto di

229
00:11:39,450 --> 00:11:42,780
‫renderlo davvero parte dei tour invece di creare una propria

230
00:11:42,780 --> 00:11:45,060
‫collezione solo per le location, giusto.

231
00:11:45,060 --> 00:11:48,073
‫Quindi lo useremo un po' più avanti in

232
00:11:48,073 --> 00:11:52,570
‫questa sezione una volta che inizieremo a creare alcune query geospaziali speciali.

233
00:11:52,570 --> 00:11:55,120
‫Ok, e con le query geospaziali, possiamo fare

234
00:11:55,120 --> 00:11:57,300
‫cose davvero sorprendenti come trovare i

235
00:11:57,300 --> 00:12:00,570
‫dati delle posizioni più vicini a determinati punti o trovare

236
00:12:00,570 --> 00:12:03,220
‫tutte le posizioni all'interno di un certo raggio

237
00:12:03,220 --> 00:12:04,790
‫o una certa sfera.

238
00:12:04,790 --> 00:12:09,260
‫E davvero, le possibilità sono assolutamente infinite, ok.

239
00:12:09,260 --> 00:12:11,760
‫Quindi vedremo solo alcune applicazioni di questo

240
00:12:11,760 --> 00:12:13,670
‫entro la fine di questa

241
00:12:13,670 --> 00:12:16,090
‫sezione perché per ora volevo solo mostrarti

242
00:12:16,090 --> 00:12:20,183
‫come possiamo creare set di dati incorporati proprio come abbiamo appena fatto.

