‫Instructeur : Bon retour.
‫Donc, après quelques cours théoriques plus lourds, maintenant,
‫nous allons enfin commencer à implémenter notre modèle de données
‫et commencer par les emplacements.
‫Donc, dans cette vidéo, vous allez
‫tout apprendre sur les données géospatiales dans MongoDB.
‫Et c'est vraiment un
‫sujet que je trouve personnellement vraiment passionnant.
‫Maintenant, rappelez-vous de la conférence précédente que
‫nos données de localisation seront en fait intégrées
‫dans les visites.
‫Et donc, en gros, nous allons déclarer tout
‫ce qui est lié aux lieux dans
‫notre modèle de tournée.
‫Très bien, ouvrons donc celui-ci et tout à la fin,
‫commençons par ajouter le startLocation.
‫D'accord, nous aurons donc startLocation
‫et puis aussi, les emplacements en général.
‫Désormais, MongoDB prend en charge les données géospatiales prêtes à l'emploi.
‫Et les données géospatiales sont essentiellement des données qui décrivent des
‫lieux sur terre à l'aide de coordonnées de longitude et de latitude.
‫D'accord, nous pouvons donc décrire des
‫points simples ou nous pouvons également décrire des
‫géométries plus complexes comme des lignes ou même des polygones ou même des multi-polygones.
‫Donc vraiment, tout
‫est possible avec les données géospatiales dans MongoDB.
‫Ok, alors ajoutons notre champ startLocation ici,
‫puis implémentons réellement ces données géospatiales.
‫Et MongoDB utilise un format de données spécial appelé GeoJSON.
‫D'accord, donc.
‫GeoJSON, afin de spécifier des données géospatiales.
‫Et maintenant, comment cela fonctionne-t-il concrètement ?
‫Eh bien, cet objet que nous avons spécifié ici
‫n'est en fait, cette fois, pas pour les options de type de
‫schéma comme nous l'avons, par exemple, ici.
‫Donc, cet objet ici est pour les options de type de schéma.
‫Vous vous en souvenez ?
‫Mais maintenant, cet objet ici est en fait
‫un objet incorporé.
‫Et donc à l'intérieur
‫de cet objet, nous pouvons spécifier quelques propriétés.
‫D'accord, et pour que cet objet soit reconnu comme
‫JSON géospatial, nous avons besoin du type et
‫des propriétés des coordonnées, d'accord.
‫Donc, nous avons besoin de type et nous
‫avons besoin de coordonnées, d'accord.
‫Et maintenant, chacun de ces
‫champs ici, donc fondamentalement, chacun de ces sous-champs va alors avoir
‫ses propres options de type de schéma.
‫D'accord, donc fondamentalement ici, c'est un peu imbriqué, donc nous avons
‫un niveau plus profond.
‫D'accord, nous avons donc les options de type de schéma
‫de type, puis nous avons également besoin d'options de type de
‫schéma pour les coordonnées et encore une fois, tout comme nous l'avons ici dans
‫ces autres champs, à la différence que ce sont maintenant des sous-champs.
‫Donc, le type a besoin du type
‫de
‫chaîne, d'accord, et la valeur par défaut devrait être point.
‫Alors, rappelez-vous comment j'ai dit que
‫nous pouvons spécifier plusieurs géométries dans MongoDB ?
‫Et celui par défaut est toujours le point.
‫Mais encore une fois, nous pourrions également spécifier des polygones ou
‫des lignes ou d'autres géométries comme celle-ci.
‫Mais dans ce cas, pour le startLocation, cela
‫devrait vraiment être le point.
‫Et donc faisons en fait de cela la
‫seule option possible en
‫spécifiant l'énumération, donc la propriété d'énumération.
‫Alors rappelez-vous, nous pouvons spécifier un
‫tableau de toutes les options possibles que ce champ peut
‫prendre et donc dans ce cas, nous voulons seulement que ce soit un point, d'accord.
‫Alors on a fait ça quelque part ici.
‫Oui, juste ici avec la
‫difficulté où nous avons dit que cela ne peut être que moyen ou difficile.
‫D'accord, et donc ici, nous faisons
‫la même chose, mais avec une seule option, d'accord.
‫Nous devons donc définir le
‫type, se souvenir, ainsi qu'un tableau de coordonnées.
‫D'accord, et donc nous le faisons en disant le
‫nombre, mais ensuite entre ces accolades.
‫D'accord, et cela signifie essentiellement que nous nous attendons
‫à un tableau de nombres et ce
‫tableau, comme son nom l'indique, est constitué des coordonnées
‫du point avec la longitude en premier et
‫en second lieu, la latitude.
‫Et donc c'est un peu
‫contre-intuitif car généralement cela fonctionne dans l'autre sens.
‫Mais dans GeoJSON, c'est comme ça que ça marche.
‫Donc si vous deviez aller, par exemple, sur
‫Google Maps afin d'obtenir
‫vos coordonnées, alors vous verrez d'abord la latitude puis la longitude.
‫Jetons un coup d'œil à cela.
‫Alors
‫ouvrez Maps ici.
‫Disons New York.
‫D'accord, et si nous cliquons maintenant quelque part
‫ici, disons ici, alors nous obtenons
‫d'abord les coordonnées avec la latitude et ensuite, la longitude.
‫Très bien, et au cas où vous ne le sauriez pas,
‫faisons un zoom arrière un peu
‫ici, afin que nous puissions voir la terre entière.
‫Wow, qu'est-ce que c'est ?
‫D'accord.
‫Donc, la latitude est essentiellement la position
‫horizontale mesurée en degrés à partir
‫de l'équateur, donc d'ici jusqu'ici.
‫Donc à l'équateur, il fait zéro
‫degré et ici, au pôle Nord, il fait 90 degrés.
‫Et puis la
‫longitude, c'est exactement la même chose, mais verticalement.
‫C'est donc la position à partir d'un méridien,
‫qui passe quelque part ici, d'accord.
‫Et donc la longitude est la position
‫verticale à partir d'ici.
‫Et c'est pourquoi ce point ici que nous
‫avons, quelque
‫part ici, quelque part ici à Manhattan, a une
‫latitude de 40 et une longitude de -73.
‫D'accord.
‫Mais de toute façon, revenons à notre code ici, bien sûr,
‫car je veux aussi spécifier une propriété pour l'adresse.
‫Alors ajoutez une autre chaîne, puis une description de ce
‫startLocation et encore
‫une fois, sous forme de chaîne, d'accord.
‫Et nous n'allons pas dire que
‫l'un de ces champs doit être obligatoire car nous voulons
‫être autorisés à laisser le champ startLocation vide.
‫Bon, encore une fois, afin de spécifier des données géospatiales avec
‫MongoDB, nous devons essentiellement créer un nouvel objet comme nous
‫l'avons fait ici.
‫Et cet objet doit alors avoir au moins deux noms de champ.
‫Donc, les coordonnées ont ce tableau de nombres, puis
‫le type, qui devrait être de type chaîne et devrait
‫être soit un point, soit une autre de
‫ces autres géométries dont je viens de vous parler auparavant.
‫D'accord, et nous pouvons bien sûr ajouter quelques champs supplémentaires
‫à cet objet comme nous l'avons fait ici, d'accord.
‫Maintenant, rappelez-vous comment, dans la dernière conférence, nous avons dit
‫comment nous allions intégrer tous les lieux dans les
‫documents de la tournée ?
‫Mais pour le moment, le startLocation ici n'est pas
‫vraiment un document lui-même.
‫C'est vraiment juste
‫un objet décrivant un certain point sur terre.
‫Mais pour vraiment créer de nouveaux
‫documents, puis les intégrer dans un autre
‫document, nous devons en fait créer un tableau, d'accord.
‫C'est donc en fait très similaire à ce que nous avons déjà ici,
‫mais il doit s'agir d'un tableau.
‫Et c'est ce que nous allons faire avec nos emplacements.
‫Donc les emplacements, et maintenant, je crée un tableau.
‫Et puis, dans ce tableau, je
‫vais spécifier l'objet comme je l'ai fait auparavant dans startLocation.
‫D'accord, et vous verrez à quoi
‫cela ressemblera dans une seconde dans l'application Compass.
‫D'accord, et maintenant, c'est en fait tout à fait la même chose qu'avant.
‫Donc, rappelez-vous que le type des données géospatiales doit
‫être une chaîne.
‫La valeur par défaut doit être point.
‫Et aussi, ça ne peut être que du point, d'accord.
‫Alors point.
‫Encore une fois, nous avons besoin des coordonnées sous forme de tableau
‫de nombres et aussi, pour tous ces
‫autres emplacements, nous voulons toujours spécifier une adresse et une description.
‫Donc chaîne et ici, je veux aussi préciser la date, donc
‫comme un nombre.
‫Et cette date sera essentiellement le jour de la
‫tournée au cours de laquelle les gens se rendront à cet endroit.
‫Maintenant, si nous voulions simplifier
‫les choses, nous pourrions supprimer le startLocation tous ensemble,
‫puis simplement définir le premier emplacement
‫comme startLocation et le définir sur le numéro de jour zéro.
‫D'accord, mais j'ai décidé que c'était
‫bien d'avoir également startLocation comme champ séparé.
‫D'accord, c'est ainsi que vous créez des documents intégrés.
‫N'oubliez pas que nous devons toujours utiliser ce tableau, d'accord.
‫Et donc, en spécifiant essentiellement un tableau d'objets, cela
‫créera alors de nouveaux documents à l'intérieur
‫du document parent, qui est, dans
‫ce cas, la visite.
‫Très bien, maintenant, afin de créer des
‫emplacements, je vais en fait importer toutes nos données d'origine.
‫Très bien, donc au lieu de créer de
‫nouvelles tournées, je supprimerai
‫celles que nous avons, puis importerai les données complètes.
‫Donc, ici, dans
‫dev-data, rappelez-vous qu'avant d'importer des tours-simples.
‫D'accord, donc ce genre de données ici.
‫Mais nous avons aussi des visites et cela
‫a alors en fait les emplacements et le startLocation.
‫Je ne sais donc pas où se trouve ce startLocation.
‫Ah, voilà.
‫C'est ainsi que nous spécifions le startLocation et
‫vous voyez que nous avons le type défini sur le point.
‫Nous avons notre tableau de coordonnées.
‫Et puis bien sûr, nous avons la description et l'adresse.
‫Et puis ici, dans l'emplacement, nous avons un tableau, qui contient
‫alors un objet pour chaque emplacement.
‫Et vous voyez qu'en fait chacun d'eux a son propre identifiant.
‫Et donc ce sont vraiment
‫des documents et pas seulement de simples objets.
‫Très bien, alors allons ici à nos import-dev-data et
‫remplaçons-le ici juste par des visites.
‫Sauvegardez-le et rappelez-vous, nous devons d'abord supprimer puis
‫importer.
‫Alors allez à une autre console ici.
‫Nous voulons maintenant exécuter
‫node, dev-data, puis importer, donc en
‫fait, dans le dossier de données, puis importer.
‫Et commençons par supprimer et attendons cela et en effet, et
‫maintenant, importons.
‫Et c'est reparti.
‫Et regardons Compass maintenant.
‫Venez à nos visites.
‫Et donc en effet, vous voyez maintenant le startLocation
‫ici comme un objet.
‫D'accord, et lorsque vous l'ouvrez, vous voyez
‫toutes les données que je viens de vous montrer
‫auparavant dans le fichier JSON.
‫Bon, alors ici aussi, les emplacements, que vous voyez
‫comme un tableau, alors tapez array.
‫Et puis là-dedans, nous avons tous ces objets
‫et chaque objet a alors aussi son identifiant d'objet.
‫D'accord, et encore une fois, c'est la preuve que nous avons maintenant
‫créé, intégré ou dénormalisé des ensembles de données,
‫donc des ensembles de données qui ont une relation très étroite
‫avec les données des tournées.
‫Et c'est pourquoi nous avons choisi de vraiment
‫l'intégrer aux tournées au lieu de créer sa propre collection
‫uniquement pour les lieux, n'est-ce pas.
‫Nous l'utiliserons donc un peu plus tard dans
‫cette section une fois que nous aurons commencé à créer des requêtes géospatiales spéciales.
‫D'accord, et avec les requêtes géospatiales, nous pouvons
‫faire des choses vraiment incroyables comme trouver
‫des données de localisation les plus proches de certains points ou
‫trouver tous les emplacements à l'intérieur d'un certain rayon
‫ou d'une certaine sphère.
‫Et vraiment, les possibilités sont absolument infinies, d'accord.
‫Nous verrons donc juste quelques applications de cela à
‫la fin de cette section car
‫pour l'instant, je voulais vraiment juste vous montrer
‫comment nous pouvons créer des ensembles de données intégrés comme nous venons de le faire.