Advertencia
Para consultas esféricas, utilice el 2dsphere resultado del índice.
El uso del índice 2d para consultas esféricas puede generar resultados incorrectos, como el uso del índice 2d para consultas esféricas que envuelven los polos.
El índice 2d admite consultas que calculan distancias en un plano euclidiano (superficie plana). También admite los siguientes operadores de consulta y comandos que calculan distancias mediante geometría esférica:
Nota
Si bien las queries básicas que utilizan la distancia esférica son compatibles con el índice 2d, considera pasar a un índice 2dsphere si tus datos son principalmente de longitud y latitud.
$geoNearetapa de canalización con laspherical: trueopción
Importante
Las operaciones mencionadas utilizan radianes para la distancia. Otros operadores de consulta esféricos, como, no lo hacen.$geoWithin
Para que los operadores de consulta esférica funcionen correctamente, debe convertir las distancias a radianes y convertir de radianes a las unidades de distancia utilizadas por su aplicación.
Para convertir:
distancia en radianes: dividir la distancia por el radio de la esfera (por ejemplo, la Tierra) en las mismas unidades que la medida de la distancia.
radianes a distancia: multiplica la medida en radianes por el radio de la esfera (por ejemplo, la Tierra) en el sistema de unidades al que quieres convertir la distancia.
El radio ecuatorial de la Tierra es de aproximadamente 3,963.2 millas o 6,378.1 kilómetros.
La siguiente query devolvería documentos de la colección places dentro del círculo descrito por el centro [ -74, 40.74 ] con un radio de 100 millas:
db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] , 100 / 3963.2 ] } } } )
Nota
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.