MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erstellen Sie einen 2dsphere Geospatial Index für sphärische Abfragen in MongoDB

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.