mongodb - texto - sumar si en tableau
Consultas enlazadas de MongoDB: ¿Cómo convierto millas a radianes? (2)
Tengo una colección de tiendas con un índice geoespacial en la propiedad de ubicación.
Lo que estoy tratando de hacer es darles la latitud, la latitud y el radio de búsqueda (mi) del usuario, quiero devolver la lista de tiendas que están dentro de esos parámetros.
Vi el siguiente ejemplo en la documentación de MongoDB ( http://www.mongodb.org/display/DOCS/Geospatial+Indexing ), pero parece que la distancia está en radianes.
center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})
Entonces, ¿cuál es la fórmula para convertir millas a radianes?
Solución La increíble gente de mongodb-user me ayudó a encontrar la respuesta. Básicamente, lo que realmente estaba buscando era una forma de limitar la distancia.
Según la documentación actualizada, hay un tercer parámetro para la consulta $ near: también puede usar $ near con una distancia máxima
db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)
El valor para $ maxDistance está en radianes; así que tuve que tomar mi distancia en millas y dividirla por 69.
¡Gracias!
Como dicen los doctores:
Todas las distancias usan radianes. Esto le permite multiplicarse fácilmente por el radio de la tierra (aproximadamente 6371 km o 3959 millas) para obtener la distancia en su elección de unidades. A la inversa, dividir por el radio de la tierra al hacer consultas.
así que simplemente necesitas dividir tu radio por el radio de la tierra. en tu ejemplo sería:
radius = 10/3959
Para utilizar mongodb $ cerca de consultas con límites de km, debe convertir el valor del radio a km. Por defecto, mongodb $ near acepta $ maxDistance como radio.
Convierta la distancia en 111.12 (un grado es aproximadamente 111.12 kilómetros) al usar km, o deje la distancia a medida que avanza usando el grado
Deje que si su radio está en km entonces use
db.places.find( { loc : { $near : [50,50] , $maxDistance : 10/111.12 } } )
pero si su radio en millas entonces conviértalo en km