MongoDB stellt die folgenden Geodaten-Indextypen bereit, die Geodatenabfragen unterstützen.
- 2D-Indizes unterstützen Abfragen, die Geometrien auf einer zweidimensionalen Ebene berechnen.
2dsphere
Indizes unterstützen Abfragen, die Geometrien auf einer erdähnlichen Kugel berechnen.
In diesem Artikel erstelle ich eine 2dsphere
index.
Beispielsammlung
Angenommen, wir haben eine Sammlung namens bars
mit folgenden Dokumenten:
{ "_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 ] } } { "_id" : 3, "name" : "Riley", "location" : { "type" : "Point", "coordinates" : [ 145.7739955395154, -16.916028253292883 ] } } { "_id" : 4, "name" : "Salt House", "location" : { "type" : "Point", "coordinates" : [ 145.78148426655065, -16.91823513430776 ] } } { "_id" : 5, "name" : "Rattle n Hum", "location" : { "type" : "Point", "coordinates" : [ 145.77746095331537, -16.920051942529685 ] } }
Jedes Dokument enthält Standortinformationen, die als GeoJSON-Objekt gespeichert sind.
Ein GeoJSON-Objekt hat ein Feld namens type
das den GeoJSON-Objekttyp und ein Feld namens coordinates
angibt die die Koordinaten des Objekts angibt.
Erstellen Sie den 2dsphere-Index
Lassen Sie uns nun die 2dsphere
erstellen index.
db.bars.createIndex( { location : "2dsphere" } )
Ausgabe:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Die 2dsphere
Index wurde nun erstellt.
Wir können jetzt getIndexes()
verwenden Methode, um unseren Index zu überprüfen:
db.bars.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]
Wir können sehen, dass der Index als 2dsphere
erstellt wurde index unter Verwendung von 2dsphereIndexVersion
von 3
, die die Standardversion für meine aktuelle MongoDB-Installation (4.4) ist.
Erstellen Sie einen zusammengesetzten 2dsphere-Index
Sie können 2dsphere
einschließen Indexschlüssel in zusammengesetzten Indizes, die mit nicht georäumlichen Indexschlüsseln kombiniert werden.
Zum Beispiel hätten wir unseren location
kombinieren können Feld mit dem name
Feld, um einen zusammengesetzten Index zu erstellen.
Lassen Sie uns den Index löschen und einen zusammengesetzten Index erstellen:
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )
Ausgabe:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Und überprüfen Sie den Index:
db.bars.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere", "name" : 1 }, "name" : "location_2dsphere_name_1", "2dsphereIndexVersion" : 3 } ]
Zusammengesetztes 2dsphere
Indizes können auf mehrere Standort- und Nicht-Standortfelder verweisen. Dies steht im Gegensatz zu zusammengesetztem 2d
Indizes, die darauf beschränkt sind, nur ein Standortfeld und ein anderes Feld zu referenzieren.
Ändern der 2dsphereIndexVersion
Sie können die 2dsphereIndexVersion
ändern indem Sie es beim Erstellen des Indexes als Feld mit dem gewünschten Wert hinzufügen.
Beispiel:
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
)
Ausgabe:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Prüfen Sie den Index:
db.bars.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 2 } ]
Dieser Index wurde als 2dsphere
erstellt Indexversion 2.
Version 2 ist die Standardversion von 2dsphere
Indizes, die in MongoDB 2.6- und 3.0-Serien erstellt wurden.
Version 3 ist die Standardversion von 2dsphere
Indizes, die in MongoDB 3.2 und höher erstellt wurden (zum Zeitpunkt des Schreibens).
Als ich den Index erstellt habe, ohne die 2dsphereIndexVersion
anzugeben Feld wurde der Index mit Version 3 erstellt, da dies die Standardversion für meine MongoDB-Version (4.4) ist.