Definición
$nearEspecifica un punto para el cual un La consultageoespacial devuelve los documentos del más cercano al más lejano.
$nearEl operador puede especificar un punto GeoJSON o un punto de coordenadas heredado.$nearrequiere un índice geoespacial:Índice2dsphere si se especifica un punto GeoJSON.
índice2d si se especifica un punto utilizando coordenadas heredadas.
Para especificar un punto GeoJSON, el operador
$near2requiere un índice dsphere y tiene la siguiente sintaxis:{ <location field>: { $near: { $geometry: { type: "Point" , coordinates: [ <longitude> , <latitude> ] }, $maxDistance: <distance in meters>, $minDistance: <distance in meters> } } } Importante
Si especifica coordenadas de longitud y latitud, enumera primero la longitud y luego la latitud.
Los valores de longitud válidos están entre
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Al especificar un punto GeoJSON, puede utilizar las especificaciones
$minDistanceopcionales y para limitar$maxDistancelos resultados$nearpor distancia en metros:$minDistancelimita los resultados a aquellos documentos que están al menos a la distancia especificada del punto central.$maxDistancelimita los resultados a aquellos documentos que se encuentran como máximo a la distancia especificada del punto central.
Para especificar un punto utilizando coordenadas heredadas,
$nearrequiere un índice 2d y tiene la siguiente sintaxis:{ $near: [ <x>, <y> ], $maxDistance: <distance in radians> } Al especificar una coordenada heredada, puede utilizar la especificación opcional para limitar los
$maxDistanceresultados$nearpor distancia en radianes. limita los resultados$maxDistancea aquellos documentos que están como máximo a la distancia especificada desde el punto central.
Comportamiento
Restricción de índices especiales
No se puede combinar el operador,$near que requiere un índice geoespacial especial, con un operador o comando de consulta que requiera otro índice especial. Por ejemplo, no se puede combinar $near con la $text consulta.
Operación de clasificación
El operador ordena los documentos por $near 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.$neares un operador de ejecución Match y no está permitido en los pipelines de agregación.
Ejemplos
Consulta sobre datos GeoJSON
Importante
Si especifica coordenadas de longitud y latitud, enumera primero la longitud y luego la latitud.
Los valores de longitud válidos están entre
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Considere una colección places que tiene un índice 2dsphere.
El siguiente ejemplo devuelve documentos que están al menos a 1000 metros y como máximo a 5000 metros del punto GeoJSON especificado, ordenados del más cercano al más lejano:
db.places.find( { location: { $near : { $geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, $minDistance: 1000, $maxDistance: 5000 } } } )
Consulta sobre coordenadas heredadas
Importante
Si especifica coordenadas de longitud y latitud, enumera primero la longitud y luego la latitud.
Los valores de longitud válidos están entre
-180y180, ambos inclusive.Los valores de latitud válidos están entre
-90y90, ambos inclusive.
Considere una colección legacy2d que tiene un índice 2d.
El siguiente ejemplo devuelve documentos que están como máximo a 0.10 radianes del par de coordenadas heredadas especificadas, ordenados del más cercano al más lejano:
db.legacy2d.find( { location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 } } )