Definición
$nearSphereEspecifica un punto para el que se La geoespacial query devuelve los documentos de más cercanos a más lejanos. MongoDB calcula distancias para
$nearSphereutilizando geometría esférica.$nearSphererequiere un índice geoespacial:Índice 2dsphere para datos de ubicación definidos como puntos GeoJSON.
2d índice para datos de ubicación definido como legacy coordinate pairs. Para usar un índice
2den puntos GeoJSON, crea el índice en el campocoordinatesdel objeto GeoJSON.
El operador
$nearSpherepuede especificar un punto GeoJSON o punto con coordenadas heredadas.Para especificar un punto GeoJSON, utilice la siguiente sintaxis:
{ $nearSphere: { $geometry: { type : "Point", coordinates : [ <longitude>, <latitude> ] }, $minDistance: <distance in meters>, $maxDistance: <distance in meters> } } El opcional
$minDistancelimita los resultados a aquellos documentos que estén al menos a la distancia especificada del punto central.El opcional
$maxDistanceestá disponible para cualquier índice.
Para especificar un punto usando coordenadas heredadas, utiliza la siguiente sintaxis:
{ $nearSphere: [ <x>, <y> ], $minDistance: <distance in radians>, $maxDistance: <distance in radians> } El opcional
$minDistanceestá disponible solo si la query utiliza el índice 2dsphere.$minDistancelimita los resultados a aquellos documentos que estén al menos a la distancia especificada desde el punto central.El opcional
$maxDistanceestá disponible para cualquier índice.
Si usas longitud y latitud para las coordenadas heredadas, especifica primero la longitud y luego la latitud.
Comportamiento
Restricción de índices especiales
No se puede combinar el $nearSphere operador, que requiere un índice geoespacial especial, con un operador del query o comando que requiera otro índice especial. Por ejemplo, no se puede combinar $nearSphere con la $text query.
Operación de Ordenamiento
El operador $nearSphere ordena los documentos por distancia.
Si usas el método
sort()en tu query, MongoDB realiza una segunda operación de ordenamiento, reorganizando los documentos coincidentes. Al consultar grandes colecciones, esto puede afectar negativamente el rendimiento de la query.Si el orden de los documentos no es importante para ti, considera usar el operador
$geoWithinen su lugar, ya que devuelve resultados no ordenados.$nearSpherees un operador de ejecución Match y no está permitido en los pipelines de agregación.
Validación
A partir de MongoDB 8.0, $near, $nearSphere y $geoNear validan que el tipo de los puntos GeoJSON especificados sea Point. Cualquier otro tipo de entrada genera un error.
Ejemplos
Especificar punto central usando GeoJSON
Considera una colección places que contenga documentos con un campo location y tenga un índice 2dsphere.
Luego, el siguiente ejemplo devuelve aquellos cuya location está, como mínimo, a 1000 metros o, como máximo, a 5000 metros del punto especificado, ordenados de menor a mayor distancia:
db.places.find( { location: { $nearSphere: { $geometry: { type : "Point", coordinates : [ -73.9667, 40.78 ] }, $minDistance: 1000, $maxDistance: 5000 } } } )
Especificar el punto central utilizando coordenadas heredadas
2d Index
Considera una colección legacyPlaces que contiene documentos con pares de coordenadas heredadas en el campo location y tiene un índice 2d.
Luego, el siguiente ejemplo retorna aquellos documentos cuyo location está como máximo a 0.10 radianes del punto especificado, ordenados de más cerca a más lejos:
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $maxDistance: 0.10 } } )
2dsphere Index
Si la colección tiene un índice 2dsphere en su lugar, también puedes especificar la especificación opcional $minDistance. Por ejemplo, en el siguiente ejemplo se devuelven los documentos cuyo location se encuentra, como mínimo, a 0.0004 radianes del punto especificado, ordenados de más cercano a más lejano:
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $minDistance: 0.0004 } } )