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).