MongoDB poskytuje následující typy geoprostorových indexů, které podporují geoprostorové dotazy.
- 2D indexy podporují dotazy, které počítají geometrie ve dvourozměrné rovině.
2dsphere
indexy podporují dotazy, které počítají geometrie na kouli podobné zemi.
V tomto článku vytvořím 2dsphere
index.
Ukázková sbírka
Předpokládejme, že máme kolekci nazvanou bars
s následujícími dokumenty:
{ "_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ždý dokument má informace o umístění uložené jako objekt GeoJSON.
Objekt GeoJSON má pole s názvem type
který určuje typ objektu GeoJSON a pole s názvem coordinates
který určuje souřadnice objektu.
Vytvořte index 2dsphere
Nyní vytvoříme 2dsphere
index.
db.bars.createIndex( { location : "2dsphere" } )
Výstup:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
2dsphere
index byl nyní vytvořen.
Nyní můžeme použít getIndexes()
metoda kontroly našeho indexu:
db.bars.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]
Vidíme, že index byl vytvořen jako 2dsphere
index pomocí 2dsphereIndexVersion
z 3
, což je výchozí verze pro mou aktuální instalaci MongoDB (4.4).
Vytvořte složený index 2dsphere
Můžete zahrnout 2dsphere
indexové klíče ve složených indexech, které jsou kombinovány s negeoprostorovými indexovými klíči.
Mohli jsme například zkombinovat naše location
pole s name
pole pro vytvoření složeného indexu.
Pojďme index vypustit a vytvořit složený index:
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )
Výstup:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
A zkontrolujte index:
db.bars.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere", "name" : 1 }, "name" : "location_2dsphere_name_1", "2dsphereIndexVersion" : 3 } ]
Složená 2dsphere
indexy mohou odkazovat na více polí umístění a polí bez umístění. To je na rozdíl od složeného 2d
indexy, které jsou omezeny na odkazování pouze na jedno pole umístění a jedno další pole.
Změna 2dsphereIndexVersion
Můžete změnit 2dsphereIndexVersion
přidáním jako pole s požadovanou hodnotou při vytváření indexu.
Příklad:
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
)
Výstup:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Zkontrolujte index:
db.bars.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 2 } ]
Tento index byl vytvořen jako 2dsphere
index verze 2.
Verze 2 je výchozí verzí 2dsphere
indexy vytvořené v sérii MongoDB 2.6 a 3.0.
Verze 3 je výchozí verzí 2dsphere
indexy vytvořené v MongoDB 3.2 a novějších (v době psaní tohoto článku).
Když jsem vytvořil index bez zadání 2dsphereIndexVersion
pole vytvořilo index pomocí verze 3, protože to je výchozí verze pro mou verzi MongoDB (4.4).