Definición
$nearSphereEspecifica un punto para el cual un La consultageoespacial devuelve los documentos del más cercano al más lejano. MongoDB calcula las distancias para mediante geometría
$nearSphereesférica.$nearSphererequiere un índice geoespacial:Índice2dsphere para datos de ubicación definidos como puntos GeoJSON
Índice2d para datos de ubicación definidos como pares de coordenadas heredados. Para usar un índice 2d en puntos GeoJSON, cree el índice en el
coordinatescampo del 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 utilizando coordenadas heredadas, utilice la siguiente sintaxis:
{ $nearSphere: [ <x>, <y> ], $minDistance: <distance in radians>, $maxDistance: <distance in radians> } El opcional
$minDistancesolo está disponible si la consulta utiliza el 2 índice dsphere. limita los resultados$minDistancea aquellos documentos que están al menos a la distancia especificada del punto central.El opcional
$maxDistanceestá disponible para cualquier índice.
Si utiliza longitud y latitud para coordenadas heredadas, especifique primero la longitud y luego la latitud.
Comportamiento
Restricción de índices especiales
No se puede combinar el operador,$nearSphere que requiere un índice geoespacial especial, con un operador o comando de consulta que requiera otro índice especial. Por ejemplo, no se puede combinar $nearSphere con la $text consulta.
Operación de clasificación
El operador ordena los documentos por $nearSphere 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 usted, considere utilizar el
$geoWithinoperador en su lugar, ya que devuelve resultados sin ordenar.$nearSpherees un operador de ejecución Match y no está permitido en los pipelines de agregación.
Ejemplos
Especificar el punto central mediante GeoJSON
Considere una colección places que contiene documentos con un location campo y tiene un índice 2 dsphere.
Luego, el siguiente ejemplo devuelve cuyo location está al menos a 1000 metros y como máximo a 5000 metros del punto especificado, ordenado del más cercano al más lejano:
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
Considere una colección legacyPlaces que contiene documentos con pares de coordenadas heredadas en el location campo y tiene un índice 2 d.
Luego, el siguiente ejemplo devuelve aquellos documentos cuyo location está como máximo a 0.10 radianes del punto especificado, ordenados del más cercano al más lejano:
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $maxDistance: 0.10 } } )
2dsphere Index
Si la colección tiene un 2dsphere índice, también puede especificar la especificación opcional. Por ejemplo, el siguiente ejemplo devuelve los documentos $minDistance cuyo location está al menos a 0.0004 radianes del punto especificado, ordenados del más cercano al más lejano:
db.legacyPlaces.find( { location : { $nearSphere : [ -73.9667, 40.78 ], $minDistance: 0.0004 } } )