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 MongoDB
/

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 especifica key y solo tiene un índice 2dsphere o un índice 2dsphere como máximo, MongoDB busca primero un índice 2d. Si no existe un índice 2d, busca uno 2dsphere.

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 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