Doctrine MongoDB中的geoNear()方法在添加附加查询时将距离设置为0

4
我正在使用geoNear()来计算我的Mongo数据库中对象之间的距离。查询功能完美,即使加入字段过滤器,例如->field('name')->equals($name)等等...
这将自动在对象上填充一个映射字段@ODM\Distance。
$this->getQueryBuilder()
->geoNear((float) $query['near_longitude'], (float) $query['near_latitude'])
->spherical(true)
->distanceMultiplier(self::EARTH_RD_KM);

如果我添加一个->field('id')->in($array),然而这个距离突然变成了0。我不太确定信息丢失的位置在哪里。这是MongoDB上$in工作的限制吗?

你想要实现什么?你的最终查询是产生错误结果还是正确结果?请更新你的问题并提供这些详细信息。 - Somnath Muluk
你是在哪里添加 ->field('id')->in($array) 的?我猜你正在改变查询的含义 - 显示添加了这个新部分的完整查询。 - Asya Kamsky
$this->getQueryBuilder()->field('id')->in($filters['ids_set']); $filters['ids_set']是一个ID数组,它会返回正确的结果子集,但距离现在是零。如果不用->in过滤,则会给我距离。@AsyaKamsky - Simon
无论如何,我认为你可以在这里查看这个问题的答案,它展示了正确语法的例子:http://stackoverflow.com/a/14756264/431012 - Asya Kamsky
1个回答

1
您需要使用“maxDistance”函数,就像这样;
$this->getQueryBuilder()
    ->geoNear((float) $query['near_longitude'], (float)$query['near_latitude'])      

    ->spherical(true) 

    ->maxDistance(self::YOUR_DESIRED_KM_RADIUS / self::EARTH_RD_KM)

    ->distanceMultiplier(self::EARTH_RD_KM);

那样可以为您的查询设置半径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接