Php 添加其他查询时,Doctrine MongoDB geoNear()d状态设置为0

Php 添加其他查询时,Doctrine MongoDB geoNear()d状态设置为0,php,mongodb,doctrine-orm,geolocation,doctrine-odm,Php,Mongodb,Doctrine Orm,Geolocation,Doctrine Odm,我正在使用geoNear()计算Mongo数据库中对象之间的距离。 即使添加了字段过滤器,如->field('name')->equals($name)等,查询也能正常工作 这会自动填充对象上的映射字段@ODM\Distance $this->getQueryBuilder() ->geoNear((float) $query['near_longitude'], (float) $query['near_latitude']) ->spherical(true) ->d

我正在使用
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);
如果我在($array)中添加一个
->字段('id')->,那么这个距离突然变为0。
我真的不确定信息在哪里丢失了。
这是对$in在MongoDB上的工作方式的限制吗?

您需要使用“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);

这样它就为您的查询设置了半径。

您希望实现什么?您的最终查询是什么,给出了错误的结果还是正确的结果?用这些详细信息更新您的问题。您在($array)中的哪里添加->字段('id')->?我猜您正在更改查询的含义-显示添加了此新部分的完整查询。$this->getQueryBuilder()->field('id')->in($filters['ids\u set')$filters['ids_set']是一个id数组,它返回正确的结果子集,但没有距离,现在距离为零。如果我不使用->过滤,它会给我距离@Asyakamsky无论如何,我想你们可以看看这个问题的答案,它显示了一个正确语法的例子: