Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Internos do índice 2d

Nesta página

  • Valores de geohash
  • documento de várias localizações para índices 2d
  • documento incorporados de vários locais
  • Saiba mais

Este documento explica os componentes internos dos índices 2d. Este material não é necessário para operações normais ou desenvolvimento de aplicativos, mas pode ser útil para solução de problemas e para maior compreensão.

Quando você cria um índice geoespacial em um campo que contém pares de coordenadas legadas , o MongoDB calcula valores de geohash para os pares de coordenadas dentro da faixa de localização especificada e, em seguida, indexa os valores de geohash.

Para calcular um valor de geohash, o MongoDB divide recursivamente um mapa bidimensional em bloco. Em seguida, ele atribui a cada quadrado um valor de dois bits. Por exemplo, uma representação de dois bits de quatro ângulos seria:

01 11
00 10

Esses valores de dois bits (00, 01, 10 e 11) representam cada um dos bloco e todos os pontos dentro de cada bloco. Cada quadrado tem um valor de geohash correspondente:

PLATAFORMA
geohash
Inferior esquerdo
00
Canto superior esquerdo
01
Canto inferior direito
10
Canto superior direito
11

Para fornecer precisão adicional, o MongoDB pode dividir cada lote em subquadrantes. Cada sub-quadrante tem o valor de geohash do quadrados que o contém concatenado com o valor do sub-quadrante. Por exemplo, o geohash para o bloco superior direito é 11 e o geohash para os subquadrantes seria (no sentido horário a partir do canto superior esquerdo):

  • 1101

  • 1111

  • 1110

  • 1100

Embora os índices 2d não ofereçam suporte a mais de um campo de localização em um documento, você pode usar um índice de várias chaves para indexar vários pares de coordenadas em um único documento. Por exemplo, no documento a seguir, o campo locs contém uma array de pares de coordenadas:

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

Os valores na array locs podem ser:

  • Arrays, como em [ 55.5, 42.3 ].

  • documento incorporado, como em { long : 55.5 , lat : 42.3 }.

Para indexar todos os pares de coordenadas na array locs , crie um índice 2d no campo locs :

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

Você pode armazenar dados de localização como um campo dentro de um documento incorporado. Por exemplo, você pode ter uma array de documentos incorporados, onde cada documento incorporado tem um campo que contém dados de localização.

No documento a seguir, o campo addresses é uma array de documentos incorporados. Os documentos incorporados contêm um campo loc , que é um 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 os valores de loc na array addresses , crie um índice 2d no campo addresses.loc :

db.records.createIndex( { "addresses.loc": "2d" } )
← Consulta de locais dentro de um perímetro em uma superfície plana