Последняя версия DoctrineODM имеет метод geoNear
: См. Код
Однако имейте в виду, что geoNear
действительно взломан для Foursquare командой MongoDB,Он возвращает только первые 100 результатов, упорядоченных по расстоянию (и вы не можете разбивать на страницы)
Вместо этого используйте $ возле : $ возле Документа для Монго 2.2
$query->field('coordinates')
->equals(array('$near' => array($lat, $lon)
, '$maxDistance' => $maxDistanceKm / 111));
Предупреждение: $ возле изменено в Mongo 2.4, теперь он возвращает также только первые 100 элементов: $ возле документа для Mongo 2.4
Если вам не нужно сортировать по расстоянию, используйте $geoWithin
(или $within
в Mongo 2.2), тогда вы можете сортировать по другим полям и разбивать на страницы:
$query->field('coordinates')
->equals(array('$within' => array('$center' => array(array($lat, $lon)
, $maxDistanceKm / 111) ) ));