Este capítulo apresenta a consulta geoespacial do MongoDB, que suporta consultas de interseção e contenção geométrica.
Cenários de aplicação:
- Desenhar um círculo no mapa e consultar os dados dentro do círculo.
Tutorial Pré-Requisito
Formatos de Armazenamento de Dados Geoespaciais para MongoDB
Os pré-requisitos para consultar dados com base na distância são os seguintes:
- Cada dado do documento contém um campo para armazenar dados de coordenadas, por exemplo: o campo de localização armazena as coordenadas de uma loja.
- Criar um índice espacial 2dsphere ou 2d.
Operador $geoWithin
É comumente usado para consultar pontos de coordenadas contidos dentro de um intervalo geométrico especificado, por exemplo: ao procurar casas desenhando em um mapa, desenhe uma área no mapa e consulte as casas dentro dessa área.
Formato da sintaxe:
{
<campo de localização>: { // Campo de consulta
$geoWithin: {
$geometry: {
type: , // Suporta apenas Polígono ou MultiPolígono
coordinates: [ <coordenadas> ] // Coleção de pontos de coordenadas geométricas
}
}
}
}
Exemplo:
db.lugares.find(
{
loc: { // O campo loc armazena os dados de coordenadas
$geoWithin: {
$geometry: {
type: "Polígono" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Encontrar dados dentro desta área geométrica
}
}
}
}
)
Consulta de dados do documento dentro da área geométrica especificada na coleção de lugares.
Operador $geoIntersects
A diferença do $geoWithin é que $geoIntersects é usado para determinar se há uma interseção entre duas geometrias.
Formato:
{
<campo de localização>: { // Campo que armazena pontos de coordenadas geométricas
$geoIntersects: {
$geometry: {
type: "<tipo de objeto geojson>" , // Tipo geométrico
coordinates: [ <coordenadas> ] // Coleção de pontos de coordenadas geométricas, consulta dados com interseção com esta geometria
}
}
}
}
Exemplo:
db.lugares.find(
{
loc: { // O campo loc armazena dados de área, que é uma forma geométrica
$geoIntersects: {
$geometry: {
type: "Polígono" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Consultar dados com interseção com esta geometria
]
}
}
}
}
)