【问题标题】:Doctrine MongoDB geoNear学说 MongoDB geoNear
【发布时间】:2011-08-08 17:31:18
【问题描述】:

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

谢谢

【问题讨论】:

    标签: mongodb doctrine doctrine-odm


    【解决方案1】:

    DoctrineODM 的最新版本有geoNear 方法:See the code

    但是,请记住,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(或者Mongo 2.2中的$within),然后可以按其他字段排序并分页:

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

    【讨论】:

    • 所以你不能用$near分页(限制)?
    • 上次我检查过:没有。使用较新的 Mongo 使用聚合框架,但考虑到许多操作是在内存中完成的,因此限制为 16Mb 的结果
    【解决方案2】:

    您的库版本是多少?

    Doctrine MongoDb mappers's trunk$qb->near(array($x, $y)) 上有一个 geoNear 命令的实现。但是很快就测试了它,我无法告诉你它在广泛使用中的效果如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多