Usa consultas geográficas
Usa consultas geoespaciales en operaciones compatibles con MongoDB para consultar documentos que existen dentro de un rango determinado desde una longitud y latitud específicas.
Antes de comenzar
Asegúrate de tener acceso a una base de datos de operaciones compatibles con MongoDB existente o crea una base de datos y conéctate a ella.
Asegúrate de tener al menos un índice 2dsphere o crea un índice 2dsphere.
Objetos GeoJSON
Para ejecutar una consulta geoespacial en los campos de tu colección, los campos que consultas deben ser objetos GeoJSON o GeoPoints.
Ejecuta una consulta geoespacial
Puedes realizar una consulta geoespacial con el operador $near, que calcula la distancia de un punto geográfico en relación con los puntos geográficos dentro de los documentos. Luego, estos documentos se ordenan de la distancia más cercana a la más lejana en los resultados de la consulta. También puedes anular este ordenamiento si defines un ordenamiento secundario, que no sea $natural, en tu consulta. El operador $near debe existir en un campo de documento en el filtro de consulta y debe contener un campo $geometry GeoJSON.
En el siguiente ejemplo, se usa el operador $near para calcular la distancia
entre el punto geográfico (-122.084, 37.4221) y los puntos geográficos ubicados en el campo
location de todos los documentos de myCollection. Los documentos se muestran
y ordenan por la distancia más cercana a la más lejana entre los dos puntos.
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
}
}
}
}
)
También puedes usar los campos opcionales $maxDistance y $minDistance para controlar la distancia en metros desde el punto de tu consulta.
En el siguiente ejemplo, se muestra una consulta en la que los documentos que se muestran deben estar a una distancia de al menos 500 metros y como máximo 2,000 metros del punto (-122.084, 37.4221):
db.myCollection.find({
location: {
$near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
$maxDistance: 2000,
$minDistance: 500
}
}
}
Si tu índice está particionado, puedes filtrar según la partición si la incluyes en un filtro de igualdad "and" dentro de tu consulta.
Por ejemplo, si tuvieras una partición region y quisieras filtrar los resultados de la consulta por la región midwest, podrías hacer lo siguiente:
db.myCollection.find( { $and: [
{ location:
{ $near: {
$geometry: {
type: 'Point',
coordinates: [ -122.084, 37.4221 ]
},
}
},
{ "region": "midwest" }
] } )
El valor de tu partición debe ser una cadena. Tu filtro de partición debe unirse a tu consulta de búsqueda con un operador $and.
Limitaciones
- Los operadores
$neary$textno se pueden usar en la misma consulta. $nearno se puede anidar en una instrucción$orde varias cláusulas, a menos que$nearsea la única expresión en la cláusula$or.$nearno se puede usar con los operadores$noto$noren una consulta.$nearno es compatible con las consultas de agregación.