‫Kursleiter: Willkommen zurück.
‫Nach einigen schwereren Theorievorträgen werden wir
‫nun endlich mit der Implementierung unseres Datenmodells beginnen und
‫mit den Standorten beginnen.
‫In diesem Video erfahren
‫Sie alles über Geodaten in MongoDB.
‫Und das ist wirklich
‫ein Thema, das ich persönlich sehr spannend finde.
‫Denken Sie nun an den vorherigen
‫Vortrag, dass unsere Standortdaten tatsächlich in die
‫Touren eingebettet werden.
‫Aus diesem Grund werden wir in unserem
‫Tourmodell grundsätzlich alles deklarieren, was mit Locations
‫zu tun hat.
‫In Ordnung, also lasst uns das öffnen und ganz am Ende
‫beginnen wir damit, die startLocation hinzuzufügen.
‫Okay, wir werden also startLocation
‫und dann auch Locations im Allgemeinen haben.
‫Jetzt unterstützt MongoDB Geodaten direkt nach dem Auspacken.
‫Und Geodaten sind im Grunde Daten, die Orte
‫auf der Erde anhand von Längen- und Breitengraden beschreiben.
‫Okay, wir können also einfache
‫Punkte beschreiben oder wir können auch
‫komplexere Geometrien wie Linien oder sogar Polygone oder sogar Multipolygone beschreiben.
‫Mit Geodaten in
‫MongoDB ist also wirklich alles möglich.
‫Okay, also fügen wir hier unser startLocation-Feld hinzu
‫und implementieren dann diese Geodaten tatsächlich.
‫Und MongoDB verwendet ein spezielles Datenformat namens GeoJSON.
‫Also gut.
‫GeoJSON, um Geodaten anzugeben.
‫Und wie funktioniert das nun konkret?
‫Nun, dieses Objekt, das wir hier angegeben haben,
‫ist diesmal tatsächlich nicht für die Schematyp-Optionen, wie wir es
‫zum Beispiel hier oben haben.
‫Dieses Objekt hier ist also für die Schematypoptionen.
‫Erinnere dich daran?
‫Aber jetzt ist dieses Objekt hier eigentlich
‫ein eingebettetes Objekt.
‫Und so können
‫wir innerhalb dieses Objekts einige Eigenschaften angeben.
‫Alles klar, und damit dieses Objekt als Geospatial
‫JSON erkannt wird, brauchen wir den Typ
‫und die Koordinateneigenschaften, alles klar.
‫Also brauchen wir Typ und wir
‫brauchen Koordinaten, in Ordnung.
‫Und nun erhält
‫jedes dieser Felder hier, also im Grunde genommen, jedes
‫dieser Unterfelder seine eigenen Schematyp-Optionen.
‫Alles klar, im Grunde ist es hier ein bisschen verschachtelt, also
‫haben wir eine Ebene tiefer.
‫Okay, wir haben also die Typ-Schema-Typ-Optionen und
‫dann brauchen wir auch noch die Schema-Typ-Optionen für
‫Koordinaten und wieder, genau wie hier oben in diesen anderen
‫Feldern, mit dem Unterschied, dass dies jetzt Unterfelder sind.
‫Typ braucht also den Typ der
‫Zeichenfolge,
‫in Ordnung, und der Standardwert sollte Punkt sein.
‫Erinnern Sie sich also daran, wie ich
‫sagte, dass wir in MongoDB mehrere Geometrien angeben können?
‫Und die Standardeinstellung ist immer Punkt.
‫Aber auch hier könnten wir Polygone oder
‫Linien oder ähnliche Geometrien angeben.
‫Aber in diesem Fall sollte es für
‫die startLocation wirklich spitze sein.
‫Lassen Sie uns das zur einzig möglichen
‫Option machen, indem wir
‫die Aufzählung, also die Aufzählungseigenschaft, angeben.
‫Denken Sie also daran, dass wir
‫ein Array aller möglichen Optionen angeben können, die dieses Feld
‫annehmen kann, und in diesem Fall möchten wir nur, dass es ein Punkt ist.
‫Also haben wir das irgendwo hier oben gemacht.
‫Ja, genau hier mit der
‫Schwierigkeit, wo wir gesagt haben, dass es nur entweder mittel oder schwer sein kann.
‫Richtig, und hier machen wir
‫dasselbe, aber nur mit einer Option, okay.
‫Wir müssen also den Typ definieren,
‫uns erinnern und auch ein Array von Koordinaten.
‫Okay, und das machen wir, indem wir Zahl sagen,
‫aber dann in diesen geschweiften Klammern.
‫Okay, und das bedeutet im Grunde, dass wir
‫ein Array von Zahlen erwarten und
‫dieses Array, wie der Name schon sagt, die Koordinaten
‫des Punktes mit dem Längengrad zuerst und
‫erst dann dem Breitengrad sind.
‫Und das ist ein
‫bisschen kontraintuitiv, denn normalerweise funktioniert es umgekehrt.
‫Aber in GeoJSON funktioniert es genau so.
‫Wenn Sie also beispielsweise zu Google Maps gehen,
‫um Ihre Koordinaten zu
‫erhalten, sehen Sie zuerst den Breiten- und dann den Längengrad.
‫Schauen wir uns das tatsächlich an.
‫Öffnen Sie
‫also Maps hier.
‫Sagen wir New York.
‫Okay, und wenn wir jetzt irgendwo hier klicken,
‫sagen wir hier, dann bekommen wir die
‫Koordinaten erstens mit dem Breitengrad und zweitens mit dem Längengrad.
‫Alles klar, und falls Sie damit nicht vertraut sind, zoomen
‫wir hier einfach ein wenig
‫heraus, damit wir die gesamte Erde sehen können.
‫Wow, was ist das?
‫Okay.
‫Der Breitengrad ist also im Grunde die horizontale
‫Position, gemessen in Grad, ausgehend vom Äquator, also
‫von hier nach hier oben.
‫Am Äquator sind es also null
‫Grad und hier oben, am Nordpol, sind es 90 Grad.
‫Und dann
‫ist der Längengrad genau das gleiche, aber vertikal.
‫Es ist also die Position ausgehend von einem
‫Meridian, der hier irgendwo verläuft, okay.
‫Der Längengrad ist also die vertikale
‫Position ab hier.
‫Und deshalb hat dieser Punkt, den
‫wir hier,
‫irgendwo hier, irgendwo hier in Manhattan, bekommen haben,
‫den Breitengrad 40 und den Längengrad -73.
‫Gut.
‫Aber egal, gehen wir hier natürlich auf unseren Code zurück, denn
‫ich möchte auch eine Eigenschaft für die Adresse angeben.
‫Fügen Sie also einen weiteren String hinzu und dann auch
‫eine Beschreibung dieser startLocation
‫und das wieder als String, in Ordnung.
‫Und wir werden nicht sagen,
‫dass eines dieser Felder erforderlich sein sollte, weil wir
‫die Möglichkeit haben möchten, startLocation leer zu lassen.
‫Okay, also noch einmal, um Geodaten mit MongoDB zu spezifizieren, müssen
‫wir im Grunde ein neues Objekt erstellen, wie wir es
‫hier getan haben.
‫Und dieses Objekt muss dann mindestens zwei Feldnamen haben.
‫Koordinaten haben also dieses Array von Zahlen und dann
‫den Typ, der vom Typ string sein sollte und
‫entweder Punkt oder eine andere dieser anderen Geometrien
‫sein sollte, von denen ich Ihnen gerade erzählt habe.
‫Okay, und dann können wir diesem Objekt natürlich noch einige
‫Felder hinzufügen, wie wir es hier gemacht haben.
‫Erinnern Sie sich jetzt, wie wir im letzten
‫Vortrag gesagt haben, wie wir alle Orte in
‫die Tourunterlagen einbetten würden?
‫Aber im Moment ist die startLocation hier
‫nicht wirklich ein Dokument.
‫Es ist wirklich nur
‫ein Objekt, das einen bestimmten Punkt auf der Erde beschreibt.
‫Aber um wirklich neue Dokumente zu
‫erstellen und sie dann in ein anderes
‫Dokument einzubetten, müssen wir tatsächlich ein Array erstellen.
‫Es ist also dem, was wir hier bereits haben, sehr ähnlich, aber
‫es muss ein Array sein.
‫Und das werden wir mit unseren Standorten machen.
‫Also Standorte, und jetzt erstelle ich ein Array.
‫Und dann werde ich in diesem Array
‫das Objekt angeben, wie ich es zuvor in startLocation getan habe.
‫Okay, und Sie werden in einer
‫Sekunde in der Compass-Anwendung sehen, wie dies aussehen wird.
‫Okay, und jetzt ist es eigentlich ganz dasselbe wie zuvor.
‫Denken Sie daran, dass der Typ für Geodaten ein
‫String sein muss.
‫Die Vorgabe muss Punkt sein.
‫Und es kann auch nichts anderes sein als ein Punkt, okay.
‫Also Punkt.
‫Auch hier brauchen wir die Koordinaten als Zahlenarray und auch
‫für all diese anderen Orte wollen
‫wir noch eine Adresse und eine Beschreibung angeben.
‫Also String und hier möchte ich auch das Datum angeben,
‫also als Zahl.
‫Und dieses Datum wird im Grunde der Tag
‫der Tour sein, an dem die Leute zu diesem Ort gehen.
‫Nun, wenn wir es
‫einfacher machen wollten, könnten wir die startLocation komplett
‫löschen und dann einfach den ersten
‫Ort als startLocation definieren und auf Tag Nummer Null setzen.
‫Alles klar, aber ich fand es
‫schön, auch startLocation als separates Feld zu haben.
‫Okay, so erstellen Sie eingebettete Dokumente.
‫Denken Sie daran, dass wir dieses Array immer verwenden müssen, okay.
‫Durch die Angabe eines Arrays von Objekten werden
‫dann innerhalb des übergeordneten Dokuments, in
‫diesem Fall der Tour,
‫brandneue Dokumente erstellt.
‫Nun gut, um einige Orte zu
‫erstellen, werde ich tatsächlich alle unsere Originaldaten importieren.
‫Also gut, statt neue Touren zu erstellen,
‫lösche ich die
‫vorhandenen und importiere dann die kompletten Daten.
‫Denken Sie hier in
‫den Dev-Daten daran, bevor wir Tours-Simple importiert haben.
‫Okay, also diese Art von Daten hier.
‫Wir haben aber auch Touren und das
‫hat dann eigentlich die Locations und die startLocation.
‫Ich bin mir also nicht sicher, wo sich diese startLocation befindet.
‫Ah, hier ist es.
‫So geben wir also startLocation an und
‫Sie sehen, dass wir type auf point gesetzt haben.
‫Wir haben unser Array von Koordinaten.
‫Und dann haben wir natürlich Beschreibung und Adresse.
‫Und dann haben wir hier unten im Ort ein Array, das
‫dann für jeden Ort ein Objekt enthält.
‫Und Sie sehen, dass tatsächlich jeder von ihnen seine eigene ID bekommt.
‫Dies sind also wirklich
‫Dokumente und nicht nur einfache Objekte.
‫Alles klar, also gehen wir hier zu unseren import-dev-data und
‫ersetzen diese hier einfach durch Touren.
‫Speichern Sie es und denken Sie dann daran, dass wir zuerst löschen und
‫dann importieren müssen.
‫Also zu einer anderen Konsole hier.
‫Wir wollen nun node
‫ausführen, dev-data und dann importieren, also
‫eigentlich in den data-Ordner, und dann importieren.
‫Und beginnen Sie mit dem Löschen und warten wir darauf und tatsächlich, und jetzt,
‫importieren Sie.
‫Und es geht los.
‫Und schauen wir uns jetzt Compass an.
‫Kommen Sie zu unseren Touren.
‫Und so sehen Sie hier die startLocation nun
‫tatsächlich als Objekt.
‫Okay, und wenn Sie das öffnen, sehen
‫Sie alle Daten, die ich Ihnen gerade zuvor
‫in der JSON-Datei gezeigt habe.
‫Richtig, dann auch hier die Orte, die Sie als Array
‫sehen, also geben Sie Array ein.
‫Und da drin haben wir all diese
‫Objekte und jedes Objekt hat dann auch seine Objekt-ID.
‫Okay, und das ist wiederum ein Beweis dafür, dass
‫wir jetzt Datensätze erstellt, eingebettet oder denormalisiert
‫haben, also Datensätze, die eine wirklich enge Beziehung zu
‫den Tourdaten haben.
‫Und deshalb haben wir uns entschieden, es wirklich
‫zu einem Teil der Touren zu machen, anstatt eine eigene Sammlung
‫nur für Orte zu erstellen, richtig.
‫Wir werden dies also etwas später in
‫diesem Abschnitt verwenden, sobald wir damit beginnen, einige spezielle Geodatenabfragen zu erstellen.
‫Okay, und mit Geo-Abfragen können wir wirklich
‫erstaunliche Dinge tun, wie zum Beispiel
‫Standortdaten zu finden, die bestimmten Punkten am nächsten sind, oder
‫alle Standorte innerhalb eines bestimmten Radius oder einer
‫bestimmten Kugel finden.
‫Und wirklich, die Möglichkeiten sind absolut endlos, okay.
‫Am Ende dieses Abschnitts werden wir nur einige
‫Anwendungen davon sehen, denn für
‫den Moment wollte ich Ihnen wirklich nur zeigen,
‫wie wir eingebettete Datensätze erstellen können, genau wie wir es gerade getan haben.