Advertencia
Para consultas esféricas, use el 2dsphere resultado del índice.
El uso del índice 2d para consultas esféricas puede generar resultados incorrectos, como el empleo del índice 2d para consultas esféricas que envuelven los polos.
El índice 2d es compatible con consultas que calculan distancias en un plano euclidiano (superficie plana). El índice también admite los siguientes operadores del query y comando que calculan distancias utilizando 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.
Etapa de pipeline
$geoNearcon la opciónspherical: true
Importante
Las operaciones mencionadas utilizan radianes para la distancia. Otros operadores de consulta esféricos, como, no lo hacen.$geoWithin
Para que los operadores del query esférica funcionen correctamente, debes convertir las distancias a radianes y convertir de radianes a las unidades de distancia utilizadas por tu aplicación.
Para convertir:
distancia en radianes: divide la distancia por el radio de la esfera (por ejemplo, la Tierra) en las mismas unidades que la medición 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 deseas 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.