Wenn Sie beim Versuch, einen 2dsphere-Index in MongoDB zu erstellen, den Fehler „Längen-/Breitengrad außerhalb des zulässigen Bereichs“ erhalten, kann dies daran liegen, dass Ihre Längen- und Breitengradkoordinaten in der falschen Reihenfolge sind.
Wenn Sie ein GeoJSON-Objekt erstellen, müssen Sie zuerst den Längengrad und dann den Breitengrad auflisten.
- Gültige Längengradwerte liegen zwischen
-180
und180
, beide inklusive. - Gültige Breitengrade liegen zwischen
-90
und90
, beide inklusive.
Wenn Sie daher den Fehler „Längen-/Breitengrad liegen außerhalb des zulässigen Bereichs“ erhalten, überprüfen Sie Ihre Dokumente, um festzustellen, in welcher Reihenfolge die Breiten- und Längenkoordinaten vorliegen.
Fehlerbeispiel
Hier ist ein Beispiel für eine Sammlung namens bars
die Dokumente mit Koordinaten in der falschen Reihenfolge enthält.
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ -16.919297718553366, 145.77675259719823 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ -16.92107838010542, 145.77621640842125 ] } }
Wenn wir versuchen, einen 2dsphere-Index für location
zu erstellen Feld, erhalten wir eine Fehlermeldung.
Beispiel:
db.bars.createIndex(
{ location : "2dsphere" }
)
Ergebnis:
{ "ok" : 0, "errmsg" : "Index build failed: 2bb26869-1dec-4484-b554-3ba55fc0c0de: Collection krankykranes.bars ( e1a99ee2-b77c-41a4-b833-25c4b3c599c3 ) :: caused by :: Can't extract geo keys: { _id: 1.0, name: \"Boardwalk Social\", location: { type: \"Point\", coordinates: [ -16.91929771855337, 145.7767525971982 ] } } longitude/latitude is out of bounds, lng: -16.9193 lat: 145.777", "code" : 16755, "codeName" : "Location16755" }
Beispiel mit korrekter Koordinatenreihenfolge
Hier ist noch einmal die Sammlung, außer mit den Koordinaten in der richtigen Reihenfolge:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ 145.77675259719823, -16.919297718553366 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ 145.77621640842125, -16.92107838010542 ] } }
Lassen Sie uns nun einen 2dsphere-Index für location
erstellen Feld:
db.bars.createIndex(
{ location : "2dsphere" }
)
Ergebnis:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dies bedeutet, dass es erstellt wurde.
Wir können dies mit getIndexes()
überprüfen Methode:
db.bars.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]