2015-12-04 87 views
4

我使用的是geoNear()來計算我的Mongo數據庫中對象之間的距離。 該查詢完美工作,即使使用了附加字段過濾器(如->field('name')->equals($name)等)...Doctrine MongoDB geoNear()dinstance在添加附加查詢時設置爲0

這會自動在對象上填充映射字段@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中的工作限制嗎?

+0

你想實現什麼?最後的查詢會給出錯誤的結果或正確的結果?用這些細節更新你的問題。 –

+0

你在哪裏添加 - > field('id') - > in($ array)?我猜你正在改變你的查詢的含義 - 顯示添加了這個新部分的完整查詢。 –

+0

$ this-> getQueryBuilder() - > field('id') - > in($ filters ['ids_set']); $ filters ['ids_set']是一個ID數組,它給了我正確的結果子集,但沒有距離,現在爲零。如果我不過濾 - >在裏面給我的距離。 @AsyaKamsky – Simon

回答

0

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

這樣它就爲您的查詢設置了一個半徑。

相關問題