Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$nearSphere (query predicate operador)

$nearSphere

Especifica un punto para el que se La consultageoespacial devuelve los documentos del más cercano al más lejano. MongoDB calcula las distancias para $nearSphere utilizando geometría esférica.

$nearSphere requiere 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 2d en puntos GeoJSON, crea el índice en el campo coordinates del objeto GeoJSON.

El operador $nearSphere puede 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 $minDistance limita los resultados a aquellos documentos que estén al menos a la distancia especificada del punto central.

  • El opcional $maxDistance está 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 $minDistance solo está disponible si la consulta utiliza el índice$minDistance 2dsphere. limita los resultados a aquellos documentos que están al menos a la distancia especificada del punto central.

  • El opcional $maxDistance está disponible para cualquier índice.

Si usas longitud y latitud para las coordenadas heredadas, especifica primero la longitud y luego la latitud.

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.

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 ti, considera usar el operador $geoWithin en su lugar, ya que devuelve resultados no ordenados.

  • $nearSphere es un operador de ejecución Match y no está permitido en los pipelines de agregació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.

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
}
}
}
)

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 } }
)

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 } }
)

Volver

$near

En esta página