添加附加查询时,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 在聚合中添加动态日期

Doctrine DBAL - 带有附加参数的 WHERE IN 数组

是否可以将 SQL 函数的结果用作 Doctrine 中的字段?