sql >> Database teknologi >  >> NoSQL >> MongoDB

Opret et 2dsphere Geospatial Index for sfæriske forespørgsler i MongoDB

MongoDB leverer følgende geospatiale indekstyper, der understøtter geospatiale forespørgsler.

  • 2d-indekser understøtter forespørgsler, der beregner geometrier på et todimensionalt plan.
  • 2dsphere indekser understøtter forespørgsler, der beregner geometrier på en jordlignende kugle.

I denne artikel opretter jeg en 2dsphere indeks.

Eksempelsamling

Antag, at vi har en samling kaldet bars med følgende dokumenter:

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

Hvert dokument har placeringsoplysninger gemt som et GeoJSON-objekt.

Et GeoJSON-objekt har et felt med navnet type der specificerer GeoJSON-objekttypen og et felt med navnet coordinates der angiver objektets koordinater.

Opret 2dsphere-indekset

Lad os nu oprette 2dsphere indeks.

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

Output:

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

2dsphere indeks er nu oprettet.

Vi kan nu bruge getIndexes() metode til at tjekke vores indeks:

db.bars.getIndexes()

Resultat:

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

Vi kan se, at indekset blev oprettet som en 2dsphere indeks ved hjælp af 2dsphereIndexVersion af 3 , som er standardversionen for min nuværende MongoDB-installation (4.4).

Opret et sammensat 2dsphere-indeks

Du kan inkludere 2dsphere indeksnøgler i sammensatte indekser, der er kombineret med ikke-geospatiale indeksnøgler.

For eksempel kunne vi have kombineret vores location felt med name felt for at oprette et sammensat indeks.

Lad os droppe indekset og oprette et sammensat indeks:

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

Output:

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

Og tjek indekset:

db.bars.getIndexes()

Resultat:

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

Sammensat 2dsphere indekser kan referere til flere placerings- og ikke-placeringsfelter. Dette er i modsætning til sammensatte 2d indekser, som er begrænset til kun at henvise til ét stedsfelt og ét andet felt.

Ændring af 2dsphereIndexVersion

Du kan ændre 2dsphereIndexVersion ved at tilføje det som et felt med den ønskede værdi ved oprettelse af indekset.

Eksempel:

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

Output:

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

Tjek indekset:

db.bars.getIndexes()

Resultat:

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

Dette indeks er blevet oprettet som en 2dsphere indeks version 2.

Version 2 er standardversionen af ​​2dsphere indekser oprettet i MongoDB 2.6- og 3.0-serien.

Version 3 er standardversionen af ​​2dsphere indekser oprettet i MongoDB 3.2 og senere (i skrivende stund).

Da jeg oprettede indekset uden at angive 2dsphereIndexVersion felt, oprettede det indekset ved hjælp af version 3, fordi det er standardversionen for min MongoDB-version (4.4).


  1. Sådan sletter du nøgler, der matcher et mønster, ved hjælp af Redis

  2. MongoDB - Sorter resultaterne af en forespørgsel

  3. Hvordan forespørges dokumenter ved hjælp af _id felt i Java mongodb driver?

  4. Sammenligning af implementeringsmønstre for MongoDB