Doctrine MongoDB geoNear

时间:2011-08-08 17:31:19

标签: mongodb doctrine doctrine-odm

我试图看看如何在不重写doctrine-mongodb项目的情况下执行geoNear命令。我查看了Expr.php和Builder.php文件,发现没有对geoNear命令的引用,如何在我的Doctrine MongoDB ODM中获得此功能?

谢谢

2 个答案:

答案 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命令的实现。但是我已经非常快速地测试了它,我无法告诉你它在广泛使用中有多好。

相关问题