Docs Menu
Docs Home
/
Manual de base de datos
/

2dsphere Indexes

Un índice 2dsphere admite consultas que calculan geometrías en una esfera similar a la Tierra. El índice 2dsphere admite todas las consultas geoespaciales de MongoDB: consultas de inclusión, intersección y proximidad. Para obtener más información sobre 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 índices 2dsphere. La versión 3 es la versión predeterminada de los índices 2dsphere creados en MongoDB 3.2 y versiones posteriores.

Versión 2

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

Para anular la versión predeterminada y especificar una versión diferente, incluya la opción { "2dsphereIndexVersion": <version> } al crear el índice.

Los índices de la versión y posteriores 2 2dsphere siempre son dispersos e ignoran la opción de dispersos. Si un documento carece de un 2dsphere campo de índice (o si el campo es null o una matriz vacía), MongoDB no añade una entrada para el documento al índice. En las inserciones, MongoDB inserta el documento, pero no lo añade al 2dsphere índice.

Para un índice compuesto que incluye una clave de índice 2dsphere junto con claves de otros tipos, solo el campo de índice 2dsphere determina si el índice hace referencia a un documento.

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

Los índices de la versión y posteriores 2 2dsphere admiten objetos GeoJSONMultiPoint adicionales:,, y. Para obtener más información sobre todos los objetos GeoJSON compatibles, MultiLineString MultiPolygon GeometryCollectionconsulte Objetos GeoJSON.

Puede especificar una key opción en la $geoNear etapa de canalización para indicar la ruta del campo indexado que se utilizará. Esto permite $geoNear usar la etapa en una colección con varios 2dsphere índices o 2 d:

  • Si su colección tiene varios 2dsphere índices y/o varios índices d, debe usar 2 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 especifica key y solo tiene un 2dsphere índice o un índice 2d como máximo, MongoDB busca primero un 2d índice. Si 2d no existe un 2dsphere índice, busca uno.

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 GeoJSON. Si intenta insertar un documento con datos no geométricos en un 2dsphere campo indexado, o crear un 2dsphere índice en una colección donde el campo indexado contiene datos no geométricos, 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, considere una colección places con documentos que almacenan datos de ubicación como puntos GeoJSON en un campo loc llamado:

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 loc ubicación:

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

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

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

A diferencia del índice d,2 un 2dsphere índice 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