Skip to content

Geobasierte Abfragen mit MongoDB

Eine besondere Eigenschaft von MongoDB ist die integrierte Funktionalität mit
geobasierten Inhalten umzugehen. MongoDB bietet die Möglichkeit,
Umkreissuchen mit vorhandenen, geobasierten Feldern in Dokumenten
durchzuführen. Auch eine Funktion zum Berechnen von Distanzen zwischen zwei
geografischen Punkten bietet MongoDB. Für solche Operationen muss innerhalb
einer Collection ein spezieller Index festgelegt werden, der die geografischen
Daten enthält. Dieser Index heißt in MongoDB „Geospatial-Index“. Pro Collection
kann ein Geospitial-Index bestimmt werden.
Die geografischen Angaben innerhalb eines Dokumentes müssen ein bestimmtes
Format haben, damit diese als Geospitial-Index verwendet werden können.
Mögliche Formate werden im Folgenden dargestellt.

{location : {x: 54.79254, y: 9.44000}}
{loc : {latitude: 54.79254, longitude: 9.44000}}
{standort : {54.79254, 9.44000}}

Nach dieser Struktur lassen sich spezielle geobasierte Felder aufbauen. Wichtig
ist, dass innerhalb eines geobasierten Feldes nicht mehr als zwei Parameter
stehen (bspw. Längen- und Breitengrad). Um der Datenbank mitzuteilen, dass es
sich bei diesen Feldern um einen Geospitial-Index handelt, muss ein Befehl auf
eine Collection ausgeführt werden.

db.collection.ensureIndex({ : "2d" })

Nachdem ein Geospitial-Index gesetzt wurde, können geobasierte Abfragen mit
diesen Feldern durchgeführt werden. Neben der Funktion, die Distanz zwischen
zwei geografischen Punkten zu bestimmen, gibt es in MongoDB die Möglichkeit
Umkreissuchen durchzuführen. Die Umkreissuche kann auf unterschiedliche
geometrische Formen bezogen werden, innerhalb dieser nach vorhandenen
geografischen Feldern in Dokumenten gesucht werden soll. Formen wären hierbei
ein Rechteck (box), eine Form bestehend aus Polygonen (polygon) oder ein
Kreis (circle). Die Umkreissuche mit Hilfe eines Kreises ist wohl die am
häufigsten verwendete Variante. Bei dieser Variante werden geografische Felder
zurückgegeben, die sich innerhalb eines definierten Kreisradius befinden.

Um eine Umkreissuche mit einem Kreismodell als Referenz durchzuführen,
werden spezielle Operatoren innerhalb der find()-Methode verwendet.
In der Abfrage muss der Mittelpunkt des Kreismodells als Ausgangspunkt sowie
der Radius definiert werden.

db.collection.find(
{
fieldName :
{
"$within" :
{
"$centerSphere" : [center, radius]
}
}
});

Unterschieden wird in MongoDB zwischen einer flachen- und einer sphärischen
Projektion, auf der die Umkreissuche durchgeführt werden soll. Durch
$centerSphere wird in MongoDB eine kugelförmige Projektionen zur
Berechnung einer Umkreissuche herangezogen. Diese Variante wird bspw. bei
Umkreissuchen auf der Erde verwendet. Die Projektion $center wird verwendet
um auf einer flachen Ebene eine Umkreissuche durchzuführen, etwa innerhalb
eines zweidimensionalen Koordinatensystems.

Empfehlenswerte Bücher zu MongoDB (Amazon):

Buch 1
Buch 2

Veröffentlicht inAllgemeinMongoDBNode.js

Comments are closed.