‫Istruttore: Bentornato.
‫Quindi, dopo alcune lezioni teoriche più pesanti,
‫ora, inizieremo finalmente a implementare il nostro modello di dati
‫e a partire dalle posizioni.
‫Quindi in questo video imparerai
‫tutto sui dati geospaziali in MongoDB.
‫E questo è davvero
‫un argomento che personalmente trovo davvero eccitante.
‫Ora, ricorda dalla lezione precedente che
‫i nostri dati sulla posizione saranno effettivamente
‫incorporati nei tour.
‫E quindi, fondamentalmente dichiareremo tutto ciò che
‫è correlato alle località nel nostro
‫modello di tour.
‫Va bene, quindi apriamolo e proprio alla fine,
‫iniziamo aggiungendo startLocation.
‫Ok, quindi avremo startLocation
‫e poi anche location in generale.
‫Ora MongoDB supporta i dati geospaziali immediatamente.
‫E i dati geospaziali sono fondamentalmente dati che descrivono
‫i luoghi sulla terra usando le coordinate di longitudine e latitudine.
‫Ok, quindi possiamo descrivere
‫punti semplici o possiamo anche descrivere
‫geometrie più complesse come linee o anche poligoni o anche multi-poligoni.
‫Quindi, davvero, tutto
‫è possibile con i dati geospaziali in MongoDB.
‫Ok, aggiungiamo qui il nostro campo startLocation
‫e poi implementiamo questi dati geospaziali.
‫E MongoDB utilizza un formato dati speciale chiamato GeoJSON.
‫Va bene, quindi.
‫GeoJSON, per specificare i dati geospaziali.
‫E ora, come funziona davvero?
‫Bene, questo oggetto che abbiamo specificato qui è in
‫realtà, questa volta, non per le opzioni del tipo di schema
‫come lo abbiamo, ad esempio, qui.
‫Quindi questo oggetto qui è per le opzioni del tipo di schema.
‫Ricordati che?
‫Ma ora, questo oggetto qui è in realtà
‫un oggetto incorporato.
‫E così all'interno di
‫questo oggetto, possiamo specificare un paio di proprietà.
‫Va bene, e affinché questo oggetto venga riconosciuto come
‫JSON geospaziale, abbiamo bisogno del tipo e delle
‫proprietà delle coordinate, va bene.
‫Quindi abbiamo bisogno di tipo e abbiamo
‫bisogno di coordinate, va bene.
‫E così ora, ognuno di
‫questi campi qui, quindi in pratica, ognuno di questi sottocampi otterrà
‫le proprie opzioni del tipo di schema.
‫Va bene, quindi in pratica qui è un po' annidato, quindi
‫abbiamo un livello più profondo.
‫Ok, quindi abbiamo le opzioni del tipo di schema
‫del tipo e poi abbiamo anche bisogno delle opzioni del
‫tipo di schema per le coordinate e ancora, proprio come abbiamo qui in
‫questi altri campi con la differenza che questi ora sono sottocampi.
‫Quindi type ha bisogno del tipo
‫di
‫stringa, va bene, e l'impostazione predefinita dovrebbe essere point.
‫Quindi ricorda come ho detto
‫che possiamo specificare più geometrie in MongoDB?
‫E quello predefinito è sempre il punto.
‫Ma ancora una volta, potremmo anche specificare poligoni o
‫linee o altre geometrie del genere.
‫Ma in questo caso, per startLocation, dovrebbe
‫davvero essere un punto.
‫E quindi rendiamo effettivamente questa l'unica opzione
‫possibile specificando l'enum,
‫quindi la proprietà di enumerazione.
‫Quindi ricorda, possiamo specificare un array
‫di tutte le possibili opzioni che questo campo può
‫assumere e quindi in questo caso, vogliamo solo che sia punto, va bene.
‫Quindi l'abbiamo fatto da qualche parte quassù.
‫Sì, proprio qui con la
‫difficoltà in cui abbiamo detto che può essere solo media o difficile.
‫Giusto, quindi qui stiamo facendo
‫la stessa cosa, ma solo con un'opzione, ok.
‫Quindi dobbiamo definire il tipo,
‫ricordare e anche un array di coordinate.
‫Ok, quindi lo facciamo dicendo il numero, ma
‫poi tra queste parentesi graffe.
‫Ok, quindi questo significa sostanzialmente che ci aspettiamo
‫un array di numeri e questo
‫array, come dice il nome, sono le coordinate
‫del punto con prima la longitudine e
‫solo la seconda, la latitudine.
‫E quindi è un po'
‫controintuitivo perché di solito funziona al contrario.
‫Ma in GeoJSON, è proprio così che funziona.
‫Quindi, se dovessi andare, ad esempio, su Google
‫Maps per ottenere le
‫tue coordinate, vedrai prima la latitudine e poi la longitudine.
‫Diamo un'occhiata a questo.
‫Quindi
‫apri Maps qui.
‫Diciamo New York.
‫Ok, e se ora clicchiamo da qualche
‫parte qui, diciamo qui, otteniamo prima
‫le coordinate con la latitudine e poi la longitudine.
‫Va bene, e nel caso tu non abbia familiarità
‫con questo, rimpiccioliamo un
‫po' qui, così possiamo vedere l'intera terra.
‫Wow, cos'è quello?
‫Va bene.
‫Quindi la latitudine è sostanzialmente la posizione orizzontale
‫misurata in gradi a partire dall'equatore,
‫quindi da qui a quassù.
‫Quindi all'equatore ci sono zero
‫gradi e quassù, al Polo Nord, ci sono 90 gradi.
‫E poi la
‫longitudine è la stessa cosa, ma in verticale.
‫Quindi è la posizione che parte da un meridiano,
‫che passa da qualche parte qui, ok.
‫E quindi la longitudine è la posizione verticale
‫che inizia da qui.
‫Ed ecco perché questo punto qui che abbiamo,
‫da qualche
‫parte qui, da qualche parte qui a Manhattan, ha una
‫latitudine di 40 e una longitudine di -73.
‫Va bene.
‫Ma comunque, torniamo al nostro codice qui, ovviamente, perché
‫voglio anche specificare una proprietà per l'indirizzo.
‫Quindi aggiungi un'altra stringa e poi anche una descrizione di
‫questa startLocation e quella
‫di nuovo, come una stringa, va bene.
‫E non diremo che
‫nessuno di questi campi dovrebbe essere richiesto perché
‫vogliamo essere autorizzati a lasciare vuoto startLocation.
‫Ok, ancora una volta, per specificare i dati geospaziali con
‫MongoDB, abbiamo fondamentalmente bisogno di creare un nuovo oggetto come
‫abbiamo fatto qui.
‫E quell'oggetto deve quindi avere almeno due nomi di campo.
‫Quindi le coordinate hanno questa matrice di numeri e
‫quindi il tipo, che dovrebbe essere di tipo stringa
‫e dovrebbe essere un punto o un'altra di
‫queste altre geometrie di cui ti ho appena parlato prima.
‫Ok, e possiamo ovviamente aggiungere altri campi a questo
‫oggetto come abbiamo fatto qui, va bene.
‫Ora, ricordi come nell'ultima conferenza abbiamo detto
‫come avremmo integrato tutte le location
‫nei documenti del tour?
‫Ma in questo momento, startLocation qui non è davvero
‫un documento in sé.
‫In realtà è solo
‫un oggetto che descrive un certo punto sulla terra.
‫Ma per creare davvero nuovi documenti
‫e poi incorporarli in un altro documento,
‫abbiamo effettivamente bisogno di creare un array, va bene.
‫Quindi in realtà è molto simile a quello che abbiamo già qui,
‫ma deve essere un array.
‫Ed è quello che faremo con le nostre sedi.
‫Quindi posizioni, e ora sto creando un array.
‫E poi in questo array è
‫dove specificherò l'oggetto come ho fatto prima in startLocation.
‫Ok, e vedrai come
‫apparirà in un secondo nell'applicazione Compass.
‫Ok, e quindi ora, in realtà è più o meno lo stesso di prima.
‫Quindi il tipo, ricorda, per i dati geospaziali
‫deve essere stringa.
‫L'impostazione predefinita deve essere punto.
‫E inoltre, non può essere altro che un punto, ok.
‫Quindi punto.
‫Ancora una volta, abbiamo bisogno delle coordinate come un array di
‫numeri e inoltre, per tutte queste altre
‫posizioni, vogliamo ancora specificare un indirizzo e una descrizione.
‫Quindi stringa e qui, voglio anche specificare la data, quindi
‫come un numero.
‫E questa data sarà sostanzialmente il giorno
‫del tour in cui le persone andranno in questo luogo.
‫Ora, se volessimo renderlo
‫più semplice, potremmo eliminare lo startLocation tutti insieme
‫e quindi definire semplicemente la prima
‫posizione come startLocation e impostarlo sul giorno numero zero.
‫Va bene, ma ho deciso che
‫è bello avere anche startLocation come campo separato.
‫Ok, è così che crei documenti incorporati.
‫Ricorda che dobbiamo sempre usare questo array, ok.
‫Quindi, specificando fondamentalmente un array di oggetti, questo
‫creerà quindi nuovi documenti all'interno del
‫documento genitore, che è, in
‫questo caso, il tour.
‫Bene, ora, per creare alcune
‫posizioni, importerò tutti i nostri dati originali.
‫Va bene, quindi invece di creare nuovi
‫tour, eliminerò quelli
‫che abbiamo e poi importerò i dati completi.
‫Quindi qui, in dev-data,
‫ricorda che prima di importare i tour, è semplice.
‫Ok, quindi questo tipo di dati qui.
‫Ma abbiamo anche tour e questo
‫ha effettivamente le posizioni e la posizione iniziale.
‫Quindi non sono sicuro di dove sia startLocation.
‫Ah, eccolo qui.
‫Quindi è così che specifichiamo startLocation
‫e vedi che abbiamo il tipo impostato su point.
‫Abbiamo la nostra serie di coordinate.
‫E poi, naturalmente, abbiamo la descrizione e l'indirizzo.
‫E poi quaggiù, nella posizione, abbiamo un array, che contiene
‫quindi un oggetto per ogni posizione.
‫E vedi che in realtà ognuno di loro ottiene il proprio ID.
‫E quindi questi sono
‫davvero documenti e non semplici oggetti.
‫Va bene, quindi andiamo qui ai nostri dati di importazione-sviluppo
‫e sostituiamolo qui solo con i tour.
‫Dagli un salvataggio e poi ricorda, dobbiamo prima eliminare e
‫poi importare.
‫Quindi andando su un'altra console qui.
‫Ora vogliamo eseguire node,
‫dev-data e quindi importare, quindi in
‫realtà, nella cartella dei dati, quindi importare.
‫E inizia eliminando e aspettiamo e anzi, e ora,
‫importa.
‫E qui andiamo.
‫E ora diamo un'occhiata a Compass.
‫Vieni ai nostri tour.
‫E così in effetti, ora vedi startLocation qui
‫come un oggetto.
‫Ok, e quando lo apri, vedi
‫tutti i dati che ti ho appena mostrato
‫prima nel file JSON.
‫Bene, allora anche qui le posizioni, che vedi come
‫un array, quindi digita array.
‫E poi lì dentro, abbiamo tutti questi oggetti
‫e ogni oggetto ha anche il suo ID oggetto.
‫Ok, e di nuovo, questa è la prova che ora abbiamo
‫creato, incorporato o denormalizzato set di dati, quindi
‫set di dati che hanno una relazione molto stretta con
‫i dati dei tour.
‫Ed è per questo che abbiamo scelto di
‫renderlo davvero parte dei tour invece di creare una propria
‫collezione solo per le location, giusto.
‫Quindi lo useremo un po' più avanti in
‫questa sezione una volta che inizieremo a creare alcune query geospaziali speciali.
‫Ok, e con le query geospaziali, possiamo fare
‫cose davvero sorprendenti come trovare i
‫dati delle posizioni più vicini a determinati punti o trovare
‫tutte le posizioni all'interno di un certo raggio
‫o una certa sfera.
‫E davvero, le possibilità sono assolutamente infinite, ok.
‫Quindi vedremo solo alcune applicazioni di questo
‫entro la fine di questa
‫sezione perché per ora volevo solo mostrarti
‫come possiamo creare set di dati incorporati proprio come abbiamo appena fatto.