What is the MongoDB's equivalent to this query:
SELECT 111151.29341326 * SQRT( pow(-6.186753-`Latitude`, 2)
+ pow(106.772835-`Longitude`, 2)
* cos(-6.186753*0.017453292519943)
* cos(`Latitude`*0.017453292519943)
)
as distance
from tablename ;
This uses the haversine formula to compute the great-circle distance to a fixed point. We want to get nearest 20 points from a location and then display the distance.
Best Answer
MongoDB has built in support for geoindexing. You don't need to do the calculation yourself.
Basically, you would create a field with the lat/long stored as an array or as sub documents, something like one of these:
Then index the new loc field appropriately:
Finally you can then use one of the operators to query a point for the nearest 20 results:
You could, of course, just use MongoDB to store the data, then pull the information out of the DB with a find() and do the calculation client-side but I imagine that is not what you want to do.
If the distance part of the equation is what you want:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand
The $geoNear operator will return the distance also. An example:
The
"dis" : 69.29646421910687
elements are what you are looking for, there is also a spherical distance option.For all this, how to use the distances, and more, take a look here for more information on geo indexes and how to use them:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing/