Docs Menu
Docs Home
/ /
2 d

2d Índice interno

Este documento proporciona una explicación más profunda de los aspectos internos de los índices geoespaciales de 2d de MongoDB. 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.

Cuando se crea un índice geoespacial en pares de coordenadas heredados, MongoDB calcula valores geohash para los pares de coordenadas dentro del rango de ubicación especificado y luego indexa los valores geohash.

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

01 11
00 10

Estos valores de dos bits (00, 01, 10 y 11) representan cada uno de los cuadrantes y todos los puntos dentro de cada cuadrante. Para un geohash con dos bits de resolución, todos los puntos en el cuadrante inferior izquierdo tendrían un geohash de 00. El cuadrante superior izquierdo tendría el geohash de 01. La parte inferior derecha y la parte superior derecha tendrían un geohash de 10 y 11, respectivamente.

Para mayor precisión, continúe dividiendo cada cuadrante en subcuadrantes. Cada subcuadrante tendría el valor geohash del cuadrante que lo contiene concatenado con el valor del subcuadrante. El geohash del cuadrante superior derecho es 11, y el geohash de los subcuadrantes sería (en sentido horario desde la esquina superior izquierda): 1101, 1111, 1110 y 1100, respectivamente.

Nota

Aunque 2d los índices geoespaciales no admiten más de un campo geoespacial en un documento, se puede usar un índice multiclave para indexar varios pares de coordenadas en un mismo documento. En el ejemplo más simple, se podría tener un campo (p. ej.,)locs que contenga una matriz de coordenadas, como en el siguiente ejemplo:

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

Los valores de la matriz pueden ser matrices, como en [ 55.5, 42.3 ], o documentos incrustados, como en { lng : 55.5 , lat : 42.3 }.

Luego podría crear un índice geoespacial en el campo locs, como en el siguiente:

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

También puede modelar los datos de ubicación como un campo dentro de un documento incrustado. En este caso, el documento contendría un campo (p. ej., addresses) que alberga una matriz de documentos, donde cada documento tiene un campo (p. ej., loc:) que contiene las coordenadas de ubicación. Por ejemplo:

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

Luego podría crear el índice geoespacial en el campo addresses.loc como en el siguiente ejemplo:

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

Volver

Consultar un índice 2d

En esta página