1

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

谢谢

4

2 回答 2

1

最新版本的DoctrineODM有geoNear方法:见代码

但是,请记住,这geoNear确实是 MongoDB 团队为 Foursquare 制作的 hack。它仅返回按距离排序的前 100 个结果(并且您不能分页)

使用$near代替:$near Doc for Mongo 2.2

$query->field('coordinates')
      ->equals(array('$near' => array($lat, $lon) 
                   , '$maxDistance' => $maxDistanceKm / 111));

警告:$near在 Mongo 2.4 中发生了变化,现在它也只返回前 100 个项目:$near Doc for Mongo 2.4


如果您不需要按距离排序,使用$geoWithin(或$within在 Mongo 2.2 中),那么您可以按其他字段排序并分页:

$query->field('coordinates')
       ->equals(array('$within' => array('$center' => array(array($lat, $lon)
                                        , $maxDistanceKm / 111) ) ));
于 2013-04-30T12:40:34.347 回答
0

你的图书馆版本是多少?

Doctrine MongoDb 映射器的主干上提供了 geoNear 命令的实现,$qb->near(array($x, $y)). 但是很快就对其进行了测试,我无法告诉您它在广泛使用中的效果如何。

于 2011-09-20T16:56:40.437 回答