MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Utwórz indeks geoprzestrzenny 2dsphere dla zapytań sferycznych w MongoDB

MongoDB udostępnia następujące typy indeksów geoprzestrzennych, które obsługują zapytania geoprzestrzenne.

  • Indeksy 2d obsługują zapytania, które obliczają geometrie na płaszczyźnie dwuwymiarowej.
  • 2dsphere indeksy obsługują zapytania, które obliczają geometrie na kuli podobnej do Ziemi.

W tym artykule tworzę 2dsphere indeks.

Przykładowa kolekcja

Załóżmy, że mamy kolekcję o nazwie bars z następującymi dokumentami:

{
	"_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
		]
	}
}

Każdy dokument zawiera informacje o lokalizacji przechowywane jako obiekt GeoJSON.

Obiekt GeoJSON ma pole o nazwie type który określa typ obiektu GeoJSON i pole o nazwie coordinates który określa współrzędne obiektu.

Utwórz indeks 2dsphere

Teraz utwórzmy 2dsphere indeks.

db.bars.createIndex( { location : "2dsphere" } )

Wyjście:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

2dsphere indeks został utworzony.

Możemy teraz użyć getIndexes() metoda sprawdzenia naszego indeksu:

db.bars.getIndexes()

Wynik:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere"
		},
		"name" : "location_2dsphere",
		"2dsphereIndexVersion" : 3
	}
]

Widzimy, że indeks został utworzony jako 2dsphere indeks, używając 2dsphereIndexVersion z 3 , która jest domyślną wersją mojej obecnej instalacji MongoDB (4.4).

Utwórz złożony indeks 2dsphere

Możesz dołączyć 2dsphere klucze indeksu w indeksach złożonych, które są połączone z kluczami indeksu niegeoprzestrzennymi.

Na przykład moglibyśmy połączyć naszą location pole z name pole, aby utworzyć indeks złożony.

Upuśćmy indeks i utwórzmy indeks złożony:

db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )

Wyjście:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

I sprawdź indeks:

db.bars.getIndexes()

Wynik:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere",
			"name" : 1
		},
		"name" : "location_2dsphere_name_1",
		"2dsphereIndexVersion" : 3
	}
]

Złożona 2dsphere indeksy mogą odwoływać się do wielu pól lokalizacji i pól niezwiązanych z lokalizacją. To jest w przeciwieństwie do złożonego 2d indeksy, które są ograniczone do odwoływania się tylko do jednego pola lokalizacji i jednego innego pola.

Zmiana wersji 2dsphereIndex

Możesz zmienić 2dsphereIndexVersion dodając go jako pole z żądaną wartością podczas tworzenia indeksu.

Przykład:

db.bars.createIndex( 
    { location : "2dsphere" },
    { "2dsphereIndexVersion" : 2 }
)

Wyjście:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Sprawdź indeks:

db.bars.getIndexes()

Wynik:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"location" : "2dsphere"
		},
		"name" : "location_2dsphere",
		"2dsphereIndexVersion" : 2
	}
]

Ten indeks został utworzony jako 2dsphere indeks wersja 2.

Wersja 2 to domyślna wersja 2dsphere indeksy utworzone w MongoDB serii 2.6 i 3.0.

Wersja 3 to domyślna wersja 2dsphere indeksy utworzone w MongoDB 3.2 i nowszych (w momencie pisania).

Kiedy utworzyłem indeks bez określenia 2dsphereIndexVersion pole, utworzył indeks przy użyciu wersji 3, ponieważ jest to domyślna wersja dla mojej wersji MongoDB (4.4).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo:policz liczbę wystąpień słów w zestawie dokumentów

  2. Zapytanie o zakres dla paginacji MongoDB

  3. mongodb jak uzyskać maksymalną wartość z kolekcji

  4. Wartość przyrostu Mongodb wewnątrz zagnieżdżonej tablicy

  5. Jak zwiększyć pole w mongodb?