0

我正在将 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 方法。

4

1 回答 1

2

查询构建器geoNear()方法不适用于字段。near()是跟随field()焦点的构建器方法。您可以在教义/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()或者,您可以使用该方法调试构建器生成的整个查询数组。

于 2013-02-07T16:39:38.237 回答