MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Crea un indice geospaziale 2dsphere per le query sferiche in MongoDB

MongoDB fornisce i seguenti tipi di indici geospaziali che supportano le query geospaziali.

  • Gli indici 2d supportano le query che calcolano le geometrie su un piano bidimensionale.
  • 2dsphere gli indici supportano query che calcolano le geometrie su una sfera simile alla terra.

In questo articolo creo una 2dsphere indice.

Raccolta di esempi

Supponiamo di avere una collezione chiamata bars con i seguenti documenti:

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

Ogni documento ha informazioni sulla posizione memorizzate come oggetto GeoJSON.

Un oggetto GeoJSON ha un campo denominato type che specifica il tipo di oggetto GeoJSON e un campo denominato coordinates che specifica le coordinate dell'oggetto.

Crea l'indice 2dsphere

Ora creiamo la 2dsphere indice.

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

Uscita:

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

La 2dsphere l'indice è stato creato.

Ora possiamo usare getIndexes() metodo per controllare il nostro indice:

db.bars.getIndexes()

Risultato:

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

Possiamo vedere che l'indice è stato creato come 2dsphere index, utilizzando 2dsphereIndexVersion di 3 , che è la versione predefinita per la mia attuale installazione di MongoDB (4.4).

Crea un indice 2dsphere composto

Puoi includere 2dsphere chiavi di indice in indici composti combinati con chiavi di indice non geospaziali.

Ad esempio, avremmo potuto combinare la nostra location campo con il name campo per creare un indice composto.

Rilasciamo l'indice e creiamo un indice composto:

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

Uscita:

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

E controlla l'indice:

db.bars.getIndexes()

Risultato:

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

Composto 2dsphere gli indici possono fare riferimento a più campi di posizione e non di posizione. Questo è in contrasto con il composto 2d indici, che si limitano a fare riferimento a un solo campo posizione e un altro campo.

Modifica della 2dsphereIndexVersion

Puoi modificare 2dsphereIndexVersion aggiungendolo come campo con il valore desiderato durante la creazione dell'indice.

Esempio:

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

Uscita:

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

Controlla l'indice:

db.bars.getIndexes()

Risultato:

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

Questo indice è stato creato come 2dsphere indice versione 2.

La versione 2 è la versione predefinita di 2dsphere indici creati nelle serie MongoDB 2.6 e 3.0.

La versione 3 è la versione predefinita di 2dsphere indici creati in MongoDB 3.2 e versioni successive (al momento della scrittura).

Quando ho creato l'indice senza specificare 2dsphereIndexVersion campo, ha creato l'indice utilizzando la versione 3, perché questa è la versione predefinita per la mia versione MongoDB (4.4).