Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 2dsphere índice admite datos almacenados como objetos GeoJSON y pares de coordenadas heredados (véase también 2dsphere Restricciones de campos indexados). Para los pares de coordenadas heredados, 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 anular la versión predeterminada y especificar una versión diferente, incluya 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.

Los índices de la versión 2 y posteriores 2dsphere admiten objetos GeoJSONMultiPoint adicionales:,, y. Para obtener más información sobre todos los objetos GeoJSON compatibles, MultiLineString MultiPolygon GeometryCollectionconsulte 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 su colección tiene varios 2dsphere índices y/o varios índices 2d, debe usar la key opción para especificar la ruta del 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 se puede usar un 2dsphere índice como clave de fragmento al fragmentar una colección. Sin embargo, se puede crear un índice geoespacial en una colección fragmentada usando un campo diferente como clave de fragmento.

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 <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 2dsphere índice compuesto puede hacer referencia a múltiples campos de ubicación y no ubicación.

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