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ě.
2dsphereindexy 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).