sql >> Databáze >  >> NoSQL >> MongoDB

Vytvořte 2dsphere Geospatial Index pro sférické dotazy v MongoDB

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


  1. Statistiky Redis

  2. Rozsah založené stránkování mongodb

  3. Jsou aktualizace Redis synchronní?

  4. Jak navrhnout redis pub/sub pro systém rychlých zpráv?