2012-11-12 36 views
0

我試圖使用$附近找到我的用戶附近的地方。Yii Emongodocuments附近的查詢忽略maxDistance

$places = Places::model()->findAll(array (
      "conditions" => array (
       'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser)), 
      ), 
      "maxDistance" => 1, 
      "limit" => 5, 
     )); 

一切似乎工作,除了它發現的地方儘可能德克薩斯州美國和我在蒙特利爾加拿大。我不知道我能做些什麼來使maxDistance發揮作用。看起來我不能使用GeoNear或nearSphere,因爲EMongoDocuments似乎不支持它們。

所以我錯過了一些明顯的東西?

我知道mongomapper-near-with-maxdistance-mongooperationfailure-geo-values-have-to但沒有任何幫助。

編輯:經度lattitude

改變順序

回答

0

在mongolabs引用這個夢幻般的傢伙: 我相信你需要把maxDistance放在$ near條件中。事情是這樣的:

$places = Places::model()->findAll(array (
"conditions" => array (
'location' => Array('near' => array((float)$this->latitudeUser,(float)$this->longitudeUser), 'maxDistance' => 1), 
), 
"limit" => 5, 
)); 

我不熟悉這個框架,所以我不能完全肯定,如果這是正確的,但我這個基礎上的等價MongoDB的查詢語法正確:

db.places.find({ location : { $near : [50,50] , $maxDistance : 5 } }).limit(5) 

注意$ maxDistance與$ near的條件相同。試一試,讓我們知道它是否有幫助。 謝謝,

0

的MongoDB想在格式座標:經度,緯度。你的陣列有錯誤的方法。除非使用nearSphere,否則距離應以度爲單位。 nearSphere的結果應該與近似的結果類似,所以EMongoDocuments應該支持。如果使用nearSphere,則最大距離爲弧度,因此如果使用該距離,則將距離(以km爲單位)除以地球半徑(以km爲單位,〜6371)。

+0

EMongoDocuments不支持NearSphere。我改變了我的代碼,但maxDistance仍然沒有使用。我在中國有一席之地,它在結果中蹦出來。甚至嘗試0.00001作爲最大距離。 – Iznogood

0

EMongoCriteria在YiiMongoDbSuite改變蒙戈運營商的字符的情況下,maxDistance會變成‘$ maxdistance’,然後MongoDB服務器會忽略它並返回靠近用戶的位置的所有100個項目。要使用MongoYii,它不會改變您的查詢條件:http://sammaye.github.io/MongoYii/