我想看看如何在不重写教义-mongodb 项目的情况下执行 geoNear 命令。我查看了 Expr.php 和 Builder.php 文件,但没有发现对 geoNear 命令的引用,如何在我的 Doctrine MongoDB ODM 中获得此功能?
谢谢
我想看看如何在不重写教义-mongodb 项目的情况下执行 geoNear 命令。我查看了 Expr.php 和 Builder.php 文件,但没有发现对 geoNear 命令的引用,如何在我的 Doctrine MongoDB ODM 中获得此功能?
谢谢
最新版本的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) ) ));
你的图书馆版本是多少?
Doctrine MongoDb 映射器的主干上提供了 geoNear 命令的实现,$qb->near(array($x, $y))
. 但是很快就对其进行了测试,我无法告诉您它在广泛使用中的效果如何。