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

Componentes internos del índice 2d

Este documento explica los pormenores de 2d índices. Este material no es necesario para las operaciones normales o el desarrollo de aplicaciones, pero puede ser útil para la resolución de problemas y para una mayor comprensión.

Al crear un índice geoespacial en un campo que contiene legacy coordinate pairs, MongoDB calcula los valores geohash para los pares de coordenadas dentro del rango de ubicaciones especificado y luego indexa estos valores geohash.

Para calcular un valor de geohash, MongoDB divide recursivamente un mapa bidimensional en cuadrantes. Luego, asigna a cada cuadrante un valor de dos bits. Por ejemplo, una representación de dos bits de cuatro cuadrantes sería la siguiente:

01 11
00 10

Estos valores de dos bits (0001, 10, y 11) representan cada uno de los cuadrantes y todos los puntos dentro de cada uno de ellos. Cada cuadrante tiene un valor de geohash correspondiente:

Cuadrante
geohash

Abajo a la izquierda

00

Esquina superior izquierda

01

Abajo a la derecha

10

Arriba a la derecha

11

Para proporcionar una precisión adicional, MongoDB puede dividir cada cuadrante en sub-cuadrantes. Cada subcuadrante tiene el valor geohash del cuadrante contenedor concatenado con el valor del subcuadrante. Por ejemplo, el geohash para el cuadrante superior derecho es 11, y el geohash para los subcuadrantes sería (en el sentido de las agujas del reloj desde la esquina superior izquierda):

  • 1101

  • 1111

  • 1110

  • 1100

Si bien los índices 2d no admiten más de un campo de ubicación en un documento, se puede usar un índice multiclave para indexar múltiples pares de coordenadas en un solo documento. Por ejemplo, en el siguiente documento, el campo locs contiene un arreglo de pares de coordenadas:

db.places.insertOne( {
locs : [
[ 55.5 , 42.3 ],
[ -74 , 44.74 ],
{ long : 55.5 , lat : 42.3 }
]
} )

Los valores en el arreglo locs pueden ser:

  • Arreglos, como en [ 55.5, 42.3 ].

  • Documentos incrustados, como en { long : 55.5 , lat : 42.3 }.

Para indexar todos los pares de coordenadas en el arreglo locs, crea un índice 2d en el campo locs:

db.places.createIndex( { "locs": "2d" } )

Puedes almacenar datos de ubicación como un campo dentro de un documento incrustado. Por ejemplo, se puede tener un arreglo de documentos incrustados donde cada documento incrustado tiene un campo que contiene datos de ubicación.

En el siguiente documento, el campo addresses es un arreglo de documentos incrustados. Los documentos incrustados contienen un campo loc, que es un par de coordenadas:

db.records.insertOne( {
name : "John Smith",
addresses : [
{
context : "home" ,
loc : [ 55.5, 42.3 ]
},
{
context : "work",
loc : [ -74 , 44.74 ]
}
]
} )

Para indexar todos los valores loc en el arreglo addresses, crea un índice 2d en el campo addresses.loc:

db.records.createIndex( { "addresses.loc": "2d" } )

Volver

Forma en una superficie

En esta página