添加附加查询时,Doctrine MongoDB geoNear() 参数设置为 0
Posted
技术标签:
【中文标题】添加附加查询时,Doctrine MongoDB geoNear() 参数设置为 0【英文标题】:Doctrine MongoDB geoNear() dinstance set to 0 when adding additional query 【发布时间】:2015-12-04 18:19:31 【问题描述】:我正在使用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。
我不确定信息丢失在哪里。
这是 $in 在 MongoDB 上工作方式的限制吗?
【问题讨论】:
你想达到什么目的?您的最终查询是什么,它给出了错误的结果或正确的结果?使用这些详细信息更新您的问题。 你在哪里添加->field('id')->in($array)?我猜您正在更改查询的含义 - 显示添加了这个新部分的完整查询。 $this->getQueryBuilder()->field('id')->in($filters['ids_set']); $filters['ids_set'] 是一个 id 数组,它给了我正确的结果子集,但没有距离,现在为零。如果我不使用 ->in 过滤,它会给我距离。 @AsyaKamsky 无论如何,我想你可以在这里查看这个问题的答案,它显示了一个正确语法的例子:***.com/a/14756264/431012 【参考方案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);
这样它会为您的查询设置一个半径。
【讨论】:
以上是关于添加附加查询时,Doctrine MongoDB geoNear() 参数设置为 0的主要内容,如果未能解决你的问题,请参考以下文章
使用 Doctrine MongoDB ODM 进行地理空间查询
Doctrine MongoDB ODM 在两个或多个字段中搜索
Doctrine MongoDB ODM 在两个或多个字段中搜索
Doctrine Mongodb ODM 在聚合中添加动态日期