sql >> Base de Datos >  >> NoSQL >> MongoDB

Cree un índice geoespacial de 2dsphere para consultas esféricas en MongoDB

MongoDB proporciona los siguientes tipos de índices geoespaciales que admiten consultas geoespaciales.

  • Los índices 2d admiten consultas que calculan geometrías en un plano bidimensional.
  • 2dsphere los índices admiten consultas que calculan geometrías en una esfera similar a la Tierra.

En este artículo, creo una 2dsphere índice.

Colección de ejemplo

Supongamos que tenemos una colección llamada bars con los siguientes documentos:

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

Cada documento tiene información de ubicación almacenada como un objeto GeoJSON.

Un objeto GeoJSON tiene un campo llamado type que especifica el tipo de objeto GeoJSON y un campo llamado coordinates que especifica las coordenadas del objeto.

Crear el índice de 2dsphere

Ahora vamos a crear la 2dsphere índice.

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

Salida:

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

La 2dsphere ahora se ha creado el índice.

Ahora podemos usar getIndexes() método para comprobar nuestro índice:

db.bars.getIndexes()

Resultado:

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

Podemos ver que el índice se creó como un 2dsphere índice, usando 2dsphereIndexVersion de 3 , que es la versión predeterminada de mi instalación actual de MongoDB (4.4).

Crear un índice compuesto de 2dsphere

Puede incluir 2dsphere claves de índice en índices compuestos que se combinan con claves de índice no geoespaciales.

Por ejemplo, podríamos haber combinado nuestra location campo con el name campo para crear un índice compuesto.

Descartemos el índice y creemos un índice compuesto:

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

Salida:

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

Y revisa el índice:

db.bars.getIndexes()

Resultado:

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

Compuesto 2dsphere los índices pueden hacer referencia a múltiples campos de ubicación y no ubicación. Esto contrasta con el compuesto 2d índices, que se limitan a hacer referencia a un solo campo de ubicación y a otro campo.

Cambiar la versión de 2dsphereIndex

Puede cambiar el 2dsphereIndexVersion agregándolo como un campo con el valor deseado al crear el índice.

Ejemplo:

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

Salida:

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

Consulta el índice:

db.bars.getIndexes()

Resultado:

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

Este índice ha sido creado como 2dsphere índice versión 2.

La versión 2 es la versión predeterminada de 2dsphere índices creados en las series MongoDB 2.6 y 3.0.

La versión 3 es la versión predeterminada de 2dsphere índices creados en MongoDB 3.2 y versiones posteriores (en el momento de escribir este artículo).

Cuando creé el índice sin especificar el 2dsphereIndexVersion campo, creó el índice usando la versión 3, porque esa es la versión predeterminada para mi versión de MongoDB (4.4).