Используйте $near
в сочетании с $maxDistance
:
db.mycollection.find({loc: {$near: [50, 50], $maxDistance: 5}})
Единица $maxDistance
совпадает с полем loc
, то есть в градусах. Степень составляет приблизительно 69 миль или 111 км на экваторе, если я правильно помню (но на других широтах она меньше, точное расстояние трудно вычислить).
Чтобы получить больше информации о возвращенных местоположениях, вы можете использовать команду geoNear
, которая, помимо прочего, сообщит вам расстояние до всех возвращенных коллекций. Смотри http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand
Я думаю, вы также можете использовать $geoWithin
для решения вашей проблемы:
db.mycollection.find({loc: {$geoWithin: {$center: [[50, 50], 5/3959]}}})
Это должно найти все местоположения внутри круга с центром в (50, 50) с радиусом 5/3959 градусов (т.е. 5 миль).