Este capítulo introduce la consulta geoespacial de MongoDB, que admite consultas de intersección y contención geométrica.
Escenarios de aplicación:
- Dibujar un círculo en el mapa y consultar los datos dentro del círculo.
Tutorial Prerrequisito
Formatos de almacenamiento de datos geoespaciales para MongoDB
Los requisitos previos para consultar datos basados en la distancia son los siguientes:
- Cada documento de datos contiene un campo para almacenar datos de coordenadas, por ejemplo: el campo de ubicación almacena las coordenadas de una tienda.
- Crear un índice espacial 2dsphere o 2d.
Operador $geoWithin
Comúnmente se utiliza para consultar puntos de coordenadas contenidos dentro de un rango geométrico especificado, por ejemplo: al buscar casas dibujando en un mapa, dibuje un área en el mapa y consulte las casas dentro de esa área.
Formato de sintaxis:
{
<campo de ubicación>: { // Campo de consulta
$geoWithin: {
$geometry: {
type: , // Solo admite Polígono o MultiPolígono.
coordinates: [ <coordenadas> ] // Colección de puntos de coordenadas geométricas
}
}
}
}
Ejemplo:
db.places.find(
{
loc: { // El campo loc almacena los datos de coordenadas
$geoWithin: {
$geometry: {
type: "Polígono" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // Encontrar datos dentro de esta área geométrica
}
}
}
}
)
Consulta los datos de documentos dentro del área geométrica especificada en la colección de lugares.
Operador $geoIntersects
La diferencia con $geoWithin es que $geoIntersects se utiliza para determinar si hay una intersección entre dos geometrías.
Formato:
{
<campo de ubicación>: { // Campo que almacena puntos de coordenadas geométricas
$geoIntersects: {
$geometry: {
type: "<tipo de objeto geojson>" , // Tipo geométrico
coordinates: [ <coordenadas> ] // Colección de puntos de coordenadas geométricas, consulta datos con intersección con esta geometría
}
}
}
}
Ejemplo:
db.places.find(
{
loc: { // El campo loc almacena datos de área, que es una forma geométrica
$geoIntersects: {
$geometry: {
type: "Polígono" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // Consulta datos con intersección con esta geometría
]
}
}
}
}
)