Un 2dsphere
índice admite consultas que calculan geometrías en una esfera similar a la tierra. 2dsphere
index 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 (consulte 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 presenta una versión 3 de 2dsphere índices. La versión 3 es la versión predeterminada de los 2dsphere índices creados en MongoDB 3.2 y posteriores. |
Versión 2 | MongoDB 2.6 presenta una versión 2 de 2dsphere índices. La versión 2 es la versión predeterminada de los 2dsphere índices 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 2dsphere
índices de la versión 2 y posteriores siempre son escasos e ignoran la opción escasa . Si un documento carece de un 2dsphere
campo de índice (o el campo es null
una matriz vacía), MongoDB no agrega una entrada para el documento al índice. Para inserciones, MongoDB inserta el documento pero no lo agrega al 2dsphere
índice.
Para un índice compuesto que incluye una 2dsphere
clave de índice junto con claves de otros tipos, solo el 2dsphere
campo de índice determina si el índice hace referencia a un documento.
Las versiones anteriores de MongoDB solo admiten 2dsphere (Version 1)
índices. 2dsphere (Version 1)
los índices no son escasos de forma predeterminada y rechazarán documentos con null
campos de ubicación.
Version 2 y posteriores 2dsphere
índices incluye soporte para el objeto GeoJSON adicional: MultiPoint
, MultiLineString
, MultiPolygon
, y GeometryCollection
. Para obtener detalles sobre todos los objetos GeoJSON compatibles, consulte Objetos GeoJSON .
A partir de MongoDB 4.0, 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 que el $geoNear
escenario se use en una colección que tiene múltiples 2dsphere
índices y / o múltiples índices 2d :
- Si su colección tiene múltiples
2dsphere
índices y / o múltiples índices 2d , debe usar lakey
opción para especificar la ruta del campo indexado a usar. - Si no especifica
key
, no puede tener un2dsphere
índice múltiple y / o un índice 2d múltiple, ya que sin élkey
, la selección de índice entre varios2d
índices o2dsphere
índices es ambigua.
NOTA
Si no especifica el key
, y tiene como máximo solo un 2dsphere
índice de índice y / o solo un 2dsphere
índice de índice, MongoDB busca primero un 2d
índice para usar. Si 2d
no existe un índice, MongoDB busca un 2dsphere
índice para usar.
No puede utilizar un 2dsphere
índice como clave de fragmentación al fragmentar una colección. Sin embargo, puede crear un índice geoespacial en una colección fragmentada utilizando un campo diferente como clave de fragmentación.
Los campos con índices 2dsphere deben contener datos de geometría en forma de pares de coordenadas o datos GeoJSON . Si intenta insertar un documento con datos que no son de geometría en un 2dsphere
campo indexado, o crea un 2dsphere
índice en una colección donde el campo indexado tiene datos que no son de geometría, la operación fallará.
Para crear un 2dsphere
índice, use el db.collection.createIndex()
método y especifique el literal de cadena "2dsphere"
como 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 heredado .
A diferencia de un índice 2d compuesto 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 no ubicación.
Para los siguientes ejemplos, considere una colección places
con documentos que almacenan datos de ubicación como GeoJSON Point en un campo llamado loc
:
db.places.insert( { loc : { type: "Point", coordinates: [ -73.97, 40.77 ] }, name: "Central Park", category : "Parks" })db.places.insert( { 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 2dsphere
clave de índice 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 2dsphere
clave de índice 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 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" } )