‫Instructor: Bienvenido de nuevo.
‫Entonces, después de algunas conferencias teóricas más
‫pesadas, ahora finalmente comenzaremos a implementar nuestro modelo de datos
‫y comenzaremos con las ubicaciones.
‫Entonces, en este video, aprenderá
‫todo sobre los datos geoespaciales en MongoDB.
‫Y este es realmente
‫un tema que personalmente encuentro realmente emocionante.
‫Ahora, recuerde de la lección anterior
‫que nuestros datos de ubicación se integrarán
‫en los recorridos.
‫Y, por lo tanto, básicamente declararemos todo
‫lo relacionado con las ubicaciones en nuestro
‫modelo de gira.
‫Muy bien, abramos ese y justo al final,
‫comencemos agregando startLocation.
‫Bien, entonces tendremos startLocation
‫y luego también, ubicaciones en general.
‫Ahora, MongoDB admite datos geoespaciales listos para usar.
‫Y los datos geoespaciales son básicamente datos que describen
‫lugares en la tierra usando coordenadas de longitud y latitud.
‫Bien, entonces podemos describir puntos
‫simples o también podemos describir geometrías
‫más complejas como líneas o incluso polígonos o incluso múltiples polígonos.
‫Entonces, realmente, todo
‫es posible con datos geoespaciales en MongoDB.
‫Bien, agreguemos nuestro campo startLocation aquí y
‫luego implementemos estos datos geoespaciales.
‫Y MongoDB usa un formato de datos especial llamado GeoJSON.
‫Está bien, entonces.
‫GeoJSON, para especificar datos geoespaciales.
‫Y ahora, ¿cómo funciona esto realmente?
‫Bueno, este objeto que especificamos aquí es en realidad,
‫esta vez, no para las opciones de tipo de esquema como
‫lo tenemos, por ejemplo, aquí arriba.
‫Entonces, este objeto aquí es para las opciones de tipo de esquema.
‫¿Recuérdalo?
‫Pero ahora, este objeto aquí es en realidad
‫un objeto incrustado.
‫Y así, dentro de
‫este objeto, podemos especificar un par de propiedades.
‫De acuerdo, y para que este objeto sea reconocido
‫como JSON geoespacial, necesitamos el tipo y las
‫propiedades de las coordenadas, de acuerdo.
‫Entonces necesitamos tipo y necesitamos
‫coordenadas, de acuerdo.
‫Y ahora, cada uno de
‫estos campos aquí, básicamente, cada uno de estos subcampos obtendrá sus
‫propias opciones de tipo de esquema.
‫Muy bien, básicamente aquí, está un poco anidado, así que tenemos
‫un nivel más profundo.
‫De acuerdo, tenemos las opciones de tipo de esquema
‫de tipo y luego también necesitamos opciones de tipo de
‫esquema para las coordenadas y nuevamente, al igual que las tenemos aquí en
‫estos otros campos con la diferencia de que ahora son subcampos.
‫Entonces, el tipo necesita el tipo de
‫cadena,
‫está bien, y el valor predeterminado debería ser punto.
‫Entonces, ¿recuerdas cómo dije que
‫podemos especificar múltiples geometrías en MongoDB?
‫Y el predeterminado es siempre el punto.
‫Pero nuevamente, también podríamos especificar polígonos o líneas
‫u otras geometrías como esa.
‫Pero en este caso, para startLocation,
‫realmente debería ser point.
‫Entonces, hagamos que esa sea la única opción
‫posible especificando la enumeración, por
‫lo que la propiedad de enumeración.
‫Así que recuerde, podemos especificar una
‫matriz de todas las opciones posibles que este campo
‫puede tomar y, en este caso, solo queremos que sea un punto, de acuerdo.
‫Así que lo hicimos en algún lugar de aquí.
‫Sí, aquí mismo con
‫la dificultad donde dijimos que solo puede ser media o difícil.
‫Bien, y aquí estamos haciendo
‫lo mismo, pero solo con una opción, está bien.
‫Entonces necesitamos definir el tipo,
‫recordar, y también, una matriz de coordenadas.
‫Está bien, y lo hacemos diciendo número,
‫pero luego en estos corchetes.
‫Bien, y eso básicamente significa que esperamos una
‫matriz de números y esta matriz,
‫como dice el nombre, son las coordenadas del punto
‫con la longitud en primer lugar y sólo
‫en segundo lugar, la latitud.
‫Y eso es un
‫poco contradictorio porque generalmente funciona al revés.
‫Pero en GeoJSON, así es como funciona.
‫Entonces, si tuviera que ir, por ejemplo, a
‫Google Maps para obtener
‫sus coordenadas, entonces verá primero la latitud y luego la longitud.
‫De hecho, echemos un vistazo a eso.
‫Así que
‫abre Mapas aquí.
‫Digamos Nueva York.
‫Bien, y si ahora hacemos clic en algún
‫lugar aquí, digamos aquí, entonces obtenemos
‫las coordenadas primero con la latitud y segundo, la longitud.
‫Muy bien, y en caso de que no esté familiarizado
‫con eso, alejemos un poco
‫aquí, para que podamos ver la Tierra entera.
‫Vaya, ¿qué es eso?
‫Bueno.
‫Entonces, la latitud es básicamente la posición horizontal
‫medida en grados comenzando desde el ecuador, es
‫decir, desde aquí hasta aquí.
‫Entonces, en el ecuador, es de cero
‫grados y aquí arriba, en el Polo Norte, es de 90 grados.
‫Y luego
‫la longitud es la misma, pero verticalmente.
‫Así que es la posición a partir de un
‫meridiano, que pasa por aquí, está bien.
‫Entonces, la longitud es la posición vertical
‫a partir de aquí.
‫Y es por eso que este punto aquí que
‫tenemos, en
‫algún lugar de aquí, en algún lugar de Manhattan, tiene
‫una latitud de 40 y una longitud de -73.
‫Está bien.
‫Pero de todos modos, volvamos a nuestro código aquí, por supuesto,
‫porque también quiero especificar una propiedad para la dirección.
‫Así que agregue otra cadena y luego también, una descripción
‫de este startLocation y
‫otra vez, como una cadena, está bien.
‫Y no vamos a decir que
‫cualquiera de estos campos deba ser obligatorio porque queremos que se
‫nos permita dejar la ubicación de inicio en blanco.
‫Bien, de nuevo, para especificar datos geoespaciales con MongoDB,
‫básicamente necesitamos crear un nuevo objeto como lo
‫hicimos aquí.
‫Y ese objeto debe tener al menos dos nombres de campo.
‫Entonces, las coordenadas tienen esta matriz de números y
‫luego el tipo, que debe ser de tipo cadena
‫y debe ser un punto o alguna otra
‫de estas otras geometrías de las que les hablé antes.
‫Bien, y luego, por supuesto, podemos agregar algunos campos más
‫a este objeto como lo hicimos aquí, de acuerdo.
‫Ahora, ¿recuerdas cómo en la última conferencia dijimos
‫cómo íbamos a incrustar todas las ubicaciones en
‫los documentos de la gira?
‫Pero en este momento, startLocation aquí no es realmente
‫un documento en sí mismo.
‫En realidad, es solo
‫un objeto que describe un cierto punto de la tierra.
‫Pero para realmente crear nuevos
‫documentos y luego incrustarlos en otro documento,
‫realmente necesitamos crear una matriz, de acuerdo.
‫Entonces, en realidad, es muy similar a lo que ya tenemos aquí,
‫pero debe ser una matriz.
‫Y eso es lo que haremos con nuestras ubicaciones.
‫Entonces, ubicaciones, y ahora, estoy creando una matriz.
‫Y luego, en esta matriz, es donde
‫voy a especificar el objeto como lo hice antes en startLocation.
‫Bien, y verá cómo se verá
‫esto en un segundo en la aplicación Compass.
‫Bien, y ahora, en realidad es lo mismo que antes.
‫Entonces, recuerde, el tipo de datos geoespaciales debe
‫ser una cadena.
‫El valor predeterminado debe ser el punto.
‫Y además, no puede ser más que un punto, está bien.
‫Así que apunte.
‫Nuevamente, necesitamos las coordenadas como una matriz de números y
‫también, para todas estas otras ubicaciones,
‫aún queremos especificar una dirección y una descripción.
‫Entonces, cadena y aquí, también quiero especificar la fecha,
‫como un número.
‫Y esta fecha será básicamente el día del
‫tour en el que la gente acudirá a este lugar.
‫Ahora, si quisiéramos hacerlo
‫más simple, podríamos eliminar startLocation todos juntos y
‫luego simplemente definir la primera ubicación
‫como startLocation y establecerla en el día número cero.
‫De acuerdo, pero decidí que es
‫bueno tener también startLocation como un campo separado.
‫Bien, así es como se crean los documentos incrustados.
‫Recuerde que siempre necesitamos usar esta matriz, está bien.
‫Y así, al especificar básicamente una matriz de objetos,
‫esto creará documentos nuevos dentro del
‫documento principal, que es, en
‫este caso, el recorrido.
‫Muy bien, ahora, para crear algunas
‫ubicaciones, voy a importar todos nuestros datos originales.
‫Muy bien, en lugar de crear nuevos
‫recorridos, eliminaré los
‫que tenemos y luego importaré los datos completos.
‫Así que aquí, en
‫dev-data, recuerde que antes de importar tours-simple.
‫Bien, este tipo de datos aquí.
‫Pero también tenemos recorridos y esto en
‫realidad tiene las ubicaciones y la ubicación de inicio.
‫Así que no estoy seguro de dónde está esa ubicación de inicio.
‫Ah, aquí está.
‫Así es como especificamos startLocation y
‫verá que tenemos el tipo establecido en punto.
‫Tenemos nuestro conjunto de coordenadas.
‫Y luego, por supuesto, tenemos descripción y dirección.
‫Y luego aquí abajo, en la ubicación, tenemos una matriz, que
‫luego contiene un objeto para cada ubicación.
‫Y ves que en realidad cada uno de ellos tiene su propia identificación.
‫Y estos son realmente
‫documentos y no simples objetos.
‫Muy bien, vayamos aquí a nuestro import-dev-data y
‫reemplacemos esto aquí solo con recorridos.
‫Guárdelo y luego recuerde, primero debemos eliminar y
‫luego importar.
‫Así que vamos a otra consola aquí.
‫Ahora queremos ejecutar node,
‫dev-data y luego importar, en realidad,
‫en la carpeta de datos, y luego importar.
‫Y empiece borrando y esperemos y de hecho, y ahora,
‫importe.
‫Y aquí vamos.
‫Y echemos un vistazo a Compass ahora.
‫Ven a nuestros tours.
‫Y, de hecho, ahora ve startLocation aquí
‫como un objeto.
‫De acuerdo, y cuando lo abres, ves
‫todos los datos que te acabo de mostrar
‫antes en el archivo JSON.
‫Bien, aquí también, las ubicaciones, que ves como una
‫matriz, así que escribe matriz.
‫Y luego allí, tenemos todos estos objetos
‫y cada objeto también tiene su ID de objeto.
‫De acuerdo, y nuevamente, esto es una prueba de que ahora hemos
‫creado, incrustado o desnormalizado conjuntos de datos, de modo
‫que conjuntos de datos que tienen una relación muy cercana con
‫los datos de los recorridos.
‫Y es por eso que decidimos convertirlo realmente
‫en parte de los recorridos en lugar de crear su
‫propia colección solo para ubicaciones, ¿verdad?
‫Así que usaremos esto un poco más adelante
‫en esta sección una vez que comencemos a crear algunas consultas geoespaciales especiales.
‫De acuerdo, y con las consultas geoespaciales, podemos
‫hacer cosas realmente asombrosas como encontrar
‫datos de ubicaciones más cercanas a ciertos puntos o encontrar
‫todas las ubicaciones dentro de un cierto radio
‫o una determinada esfera.
‫Y realmente, las posibilidades son absolutamente infinitas, está bien.
‫Así que solo veremos algunas aplicaciones de esto
‫al final de esta sección
‫porque por ahora, realmente solo quería mostrarles
‫cómo podemos crear conjuntos de datos incrustados tal como lo acabamos de hacer.