Los índices 2d y 2dsphere son índices geoespaciales. Los índices geoespaciales tienen estas restricciones:
Opción de intercalación
Los índices 2d no admiten la opción intercalación, solo comparación binaria. La comparación binaria compara el valor Unicode numérico de cada carácter en cada string, y no considera las mayúsculas ni los signos diacríticos.
Para crear un índice 2d en una colección que tenga una intercalación no simple, debes especificarlo explícitamente { collation: { locale: "simple"
} } cuando crees el índice.
Por ejemplo, considere una colección llamada "collationTest" con una intercalación de { locale: "en" }:
db.createCollection( "collationTest", { collation: { locale: "en" } } )
Para crear un índice 2d en la colección collationTest, debes especificar { collation: { locale: "simple" } }. Este comando crea un índice 2d en el campo loc:
db.collationTest.createIndex( { loc: "2d" }, { collation: { locale: "simple" } } )
Consultas cubiertas
Los índices geoespaciales no pueden cubrir una query.
clave de partición
No puedes usar un índice geoespacial como clave de partición. Sin embargo, se puede crear un índice geoespacial en una colección particionada utilizando un campo diferente como clave de partición.
Índices geoespaciales múltiples con $geoNear
Si tu colección tiene varios índices geoespaciales, cuando ejecutes la etapa de pipeline $geoNear, debes especificar la opción $geoNear key. La opción key especifica qué índice debe utilizarse para respaldar la query.
tipos de datos compatibles
Un campo indexado con un índice 2dsphere debe contener datos de geometría. Los datos de geometría pueden ser:
Usted no puede:
Inserta un documento con datos no geométricos en un campo que esté indexado con un índice 2dsphere.
Compila un índice 2dsphere en un campo que contiene datos no geométricos.
Número de claves de índice
Al crear un índice 2dsphere, mongod mapea las formas GeoJSON a una representación interna. La representación interna resultante puede ser un gran arreglo de valores.
La configuración indexMaxNumGeneratedKeysPerDocument limita el número máximo de claves generadas para un solo documento para evitar errores de falta de memoria. Si una operación requiere más claves de las especificadas por el parámetro indexMaxNumGeneratedKeysPerDocument, la operación falla.
Por defecto, el servidor permite hasta 100,000 claves de índice por documento. Para permitir más claves de índice, aumente el valor de indexMaxNumGeneratedKeysPerDocument.
Coincidencias exactas en una superficie plana
Un índice 2d no puede mejorar el rendimiento para coincidencias exactas en un par de coordenadas.
Por ejemplo, considere una colección contacts con estos documentos:
db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] )
Un índice 2d en el campo address no mejora el rendimiento para la siguiente query:
db.contacts.find( { address: [ 55.5, 42.3 ] } )
Para mejorar el rendimiento de esta query, crea un índice ascendente o descendente en el campo address:
db.contacts.createIndex( { address: 1 } )