我试图看看如何在不重写doctrine-mongodb项目的情况下执行geoNear命令。我查看了Expr.php和Builder.php文件,发现没有对geoNear命令的引用,如何在我的Doctrine MongoDB ODM中获得此功能?
谢谢
答案 0 :(得分:1)
DoctrineODM的lastes版本采用geoNear
方法:See the code
但是,请记住,geoNear
确实是MongoDB团队为Foursquare所做的一次破解。它只返回按距离排序的前100个结果(并且您不能分页)
使用 $ near 代替:$near Doc for Mongo 2.2
$query->field('coordinates')
->equals(array('$near' => array($lat, $lon)
, '$maxDistance' => $maxDistanceKm / 111));
警告:在Mongo 2.4中更改了 $ near ,现在它只返回前100个项目:$near Doc for Mongo 2.4
如果您不需要按距离排序,请使用$geoWithin
(或Mongo 2.2中的$within
),然后您可以按其他字段和分页进行排序:
$query->field('coordinates')
->equals(array('$within' => array('$center' => array(array($lat, $lon)
, $maxDistanceKm / 111) ) ));
答案 1 :(得分:0)
您的图书馆版本多大了?
Doctrine MongoDb mappers's trunk,$qb->near(array($x, $y))
上有一个geoNear命令的实现。但是我已经非常快速地测试了它,我无法告诉你它在广泛使用中有多好。