使用Doctrine MongoDB ODM的geonear方法中的距离错误

时间:2013-01-02 14:16:14

标签: mongodb symfony doctrine-odm

我正在使用DoctrineMongoDBBundle和Symfony2,我遇到了地理坐标的问题。这工作正常,但当经度是这样的:0.635467代码不起作用。我有更多的地理坐标,只有在从0开始时才会失败。距离字段为NULL。

这是我的代码:

$locations = $dm->createQueryBuilder('MyBundle:Location')
                    ->field('id')->in($arrayIds)
                    ->field('geocoordinates')
                    ->geoNear($geocodes['lat'],$geocodes['lon'])
                    ->getQuery()->execute()->toArray();

我正在关注此链接:http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/geospatial-queries.html,但使用geonear方法。

1 个答案:

答案 0 :(得分:2)

geoNear()查询构建器方法不适用于字段。 near()是遵循field()焦点的构建器方法。您可以在doctrine / mongodb项目中的Builder.php中查看这两种构建器方法的作用。请注意geoNear()更改了查询类型(类似于update()所做的)。然后在Query.php中检查查询类型(按照switch语句)并确定我们如何在集合上发出查询。有些是实际的查询操作,但map / reduce和geoNear等命令都是命令。

查看以下代码是否有效:

$dm->createQueryBuilder('MyBundle:Location')
    ->geoNear($geocodes['lat'],$geocodes['lon'])
    ->field('id')->in($arrayIds)
    ->getQuery()->execute()->toArray();

如果没有,请调试Query.php传递给Collection::near()方法的值。或者,您可以使用Query::getQuery()方法调试构建器生成的整个查询数组。