Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/
Manual de base de datos
/

2dsphere Indexes

Un índice de 2dsphere admite consultas que calculan geometrías en una esfera similar a la Tierra. El índice 2dsphere soporta todas las consultas geoespaciales de MongoDB: consultas de inclusión, intersección y proximidad. Para obtener más información sobre las consultas geoespaciales, consulte Consultas geoespaciales.

El índice 2dsphere admite datos almacenados como objetos GeoJSON y legacy coordinate pairs (ver también Restricciones de campo indexado2dsphere ). Para legacy coordinate pairs, el índice convierte los datos a GeoJSON Point.

2dsphere Versión del Índice
Descripción

Versión 3

MongoDB 3.2 introduce una versión 3 de los índices 2dsphere. La Versión 3 es la versión por defecto de los índices de 2dsphere creados en MongoDB 3.2 y posteriores.

Versión 2

MongoDB 2.6 introduce la versión 2 de los índices 2dsphere. La versión 2 es la versión por defecto de los índices 2dsphere creados en MongoDB 2.6 y en la serie 3.0.

Para sobrescribir la versión por defecto y especificar una versión diferente, incluye la opción { "2dsphereIndexVersion": <version> } al crear el índice.

A partir de la versión 2, los índices 2dsphere son siempre dispersos e ignoran la opción disperso. Si un documento carece de un campo de índice 2dsphere (o el campo es null o un arreglo vacío), MongoDB no adiciona una entrada para el documento en el índice. Para inserciones, MongoDB inserta el documento pero no lo añade al índice 2dsphere.

Para un índice compuesto que incluye un índice clave 2dsphere junto con índices de otros tipos, sólo el campo índice 2dsphere determina si el índice hace referencia a un documento.

Las versiones anteriores de MongoDB solo admiten índices 2dsphere (Version 1). Los índices 2dsphere (Version 1) no son dispersos por defecto y rechazarán los documentos con campos de ubicación null.

Las versiones 2 y posteriores de los índices 2dsphere incluyen soporte para objetos GeoJSON adicionales: MultiPoint, MultiLineString, MultiPolygon y GeometryCollection. Para obtener detalles sobre todos los objetos GeoJSON compatibles, consulta Objetos GeoJSON.

Puedes especificar una opción key en la $geoNear etapa de la pipeline para indicar la ruta de campo indexado a usar. Esto permite que la etapa $geoNear se utilice en una colección que tenga múltiples índices 2dsphere y/o múltiples índices 2d:

  • Si tu colección tiene múltiples 2dsphere índices y/o múltiples 2d índices, debes usar la opción key para especificar la ruta de campo indexado a utilizar.

  • Si no especifica el key, no puede tener múltiples índices 2dsphere y/o varios índices 2d ya que, sin el key, la selección de índices entre múltiples índices 2d o índices 2dsphere resulta ambigua.

Nota

Si no se especifica el key, y se tiene como máximo solo un índice 2dsphere y/o solo un índice 2d, MongoDB buscará primero un índice 2d para usar. Si no existe un índice 2d, entonces MongoDB busca un índice 2dsphere para usar.

No puedes utilizar un índice 2dsphere como una clave de partición al fragmentar una colección. Sin embargo, puedes crear un índice geoespacial en una colección particionada utilizando un campo diferente como la clave de partición.

Los campos con índices 2dsphere deben contener datos geométricos en forma de pares de coordenadas o datos en formato GeoJSON. Si intentas insertar un documento con datos que no sean de geometría en un campo indexado 2dsphere, o compilar un índice 2dsphere en una colección donde el campo indexado tiene datos que no son de geometría, la operación fallará.

Para generar claves para un índice 2dsphere, mongod asigna formas GeoJSON a una representación interna. La representación interna resultante puede ser un gran arreglo de valores.

Cuando mongod genera claves de índice en un campo que contiene un arreglo, mongod genera una clave de índice para cada elemento del arreglo. Para los índices compuestos, mongod calcula el producto cartesiano de los conjuntos de claves que se generan para cada campo. Si ambos conjuntos son grandes, entonces calcular el producto cartesiano podría hacer que la operación exceda los límites de memoria.

indexMaxNumGeneratedKeysPerDocument limita el número máximo de claves generadas para un solo documento para prevenir errores de memoria insuficiente. El valor por defecto es de 100 000 claves de índice por documento. Es posible aumentar el límite, pero si una operación requiere más claves de las que el parámetro indexMaxNumGeneratedKeysPerDocument especifica, la operación fallará.

Para crear un índice 2dsphere, utiliza el método db.collection.createIndex() y especifica el literal de cadena "2dsphere" como el tipo de índice:

db.collection.createIndex( { <location field> : "2dsphere" } )

donde el <location field> es un campo cuyo valor es un objeto GeoJSON o un par de coordenadas heredadas.

Nota

Si intenta crear un índice en un campo que contiene un arreglo de puntos geoJSON, la creación de índices falla y devuelve el siguiente error:

MongoServerError: Index build failed

A diferencia de un índice compuesto 2d, que puede hacer referencia a un campo de ubicación y a otro campo, un índice compuesto 2dsphere puede hacer referencia a múltiples campos de ubicación y de otro tipo.

Para los siguientes ejemplos, consideren una colección places con documentos que almacenen datos de ubicación como punto GeoJSON en un campo llamado loc:

db.places.insertMany( [
{
loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
name: "Central Park",
category : "Parks"
},
{
loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
name: "La Guardia Airport",
category : "Airport"
}
] )

La siguiente operación crea un índice 2dsphere en el campo de ubicación loc:

db.places.createIndex( { loc : "2dsphere" } )

Un índice compuesto puede incluir una clave de índice 2dsphere en combinación con claves de índice no geoespaciales. Por ejemplo, la siguiente operación crea un índice compuesto donde la primera clave loc es una clave de índice 2dsphere, y las claves restantes category y names son claves de índice no geoespaciales, específicamente claves descendentes (-1) y ascendentes (1), respectivamente.

db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

A diferencia del índice 2d, un índice 2dsphere compuesto no requiere que el campo de ubicación sea el primer campo indexado. Por ejemplo:

db.places.createIndex( { category : 1 , loc : "2dsphere" } )

Volver

Restricciones del índice comodín

En esta página