sql >> Databasteknik >  >> NoSQL >> MongoDB

Skapa ett 2dsphere Geospatial Index för sfäriska frågor i MongoDB

MongoDB tillhandahåller följande geospatiala indextyper som stöder geospatiala frågor.

  • 2D-index stöder frågor som beräknar geometrier på ett tvådimensionellt plan.
  • 2dsphere index stöder frågor som beräknar geometrier på en jordliknande sfär.

I den här artikeln skapar jag en 2dsphere index.

Exempelsamling

Anta att vi har en samling som heter bars med följande dokument:

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

Varje dokument har platsinformation lagrad som ett GeoJSON-objekt.

Ett GeoJSON-objekt har ett fält som heter type som anger GeoJSON-objekttypen och ett fält med namnet coordinates som anger objektets koordinater.

Skapa 2dsphere-indexet

Låt oss nu skapa 2dsphere index.

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

Utdata:

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

2dsphere index har nu skapats.

Vi kan nu använda getIndexes() metod för att kontrollera vårt index:

db.bars.getIndexes()

Resultat:

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

Vi kan se att indexet skapades som en 2dsphere index, med 2dsphereIndexVersion av 3 , vilket är standardversionen för min nuvarande MongoDB-installation (4.4).

Skapa ett sammansatt 2dsphere-index

Du kan inkludera 2dsphere indexnycklar i sammansatta index som kombineras med icke-geospatiala indexnycklar.

Vi kunde till exempel ha kombinerat vår location fältet med name för att skapa ett sammansatt index.

Låt oss släppa indexet och skapa ett sammansatt index:

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

Utdata:

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

Och kolla indexet:

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
	}
]

Sammansatt 2dsphere index kan referera till flera plats- och icke-platsfält. Detta är i motsats till sammansatt 2d index, som är begränsade till att endast referera till ett platsfält och ett annat fält.

Ändra 2dsphereIndexVersion

Du kan ändra 2dsphereIndexVersion genom att lägga till det som ett fält med önskat värde när du skapar indexet.

Exempel:

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

Utdata:

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

Kontrollera indexet:

db.bars.getIndexes()

Resultat:

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

Detta index har skapats som en 2dsphere index version 2.

Version 2 är standardversionen av 2dsphere index skapade i MongoDB 2.6- och 3.0-serien.

Version 3 är standardversionen av 2dsphere index skapade i MongoDB 3.2 och senare (i skrivande stund).

När jag skapade indexet utan att ange 2dsphereIndexVersion fältet skapade den indexet med version 3, eftersom det är standardversionen för min MongoDB-version (4.4).


  1. MongoDB-tjänsten körs inte i Fedora

  2. Java konverterar byte till binär säker sträng

  3. hur kan jag se vilka portar mongo lyssnar på från mongo shell?

  4. Hur man bäst skapar ett RESTful API i Node.js