2011-10-06 41 views
0

根據我的要求,我得到了不同的結果。我有一個由2d座標索引的Mongo集合「停止」。

從蒙戈控制檯:

> db.stops.find({loc:{$near: [-##.94248402000001,##.444653126]}}).limit(3) 
{ "_id" : ObjectId("4e8e0e64597535e4cb0001bd"), "stop_id" : 873198944, "stop_name" : "STOP ONE", "loc" : [ -##.942535, ##.444538 ] } 
{ "_id" : ObjectId("4e8e0e66597535e4cb001260"), "stop_id" : 1603800857, "stop_name" : "STOP TWO", "loc" : [ -##.94355, ##.444672 ] } 
{ "_id" : ObjectId("4e8e0e66597535e4cb000bb7"), "stop_id" : 3659710794, "stop_name" : "STOP THREE", "loc" : [ -##.94355, ##.444672 ] } 

我的PHP代碼:

$mdb=new Mongo(); 
$result=$mdb->myapp->stops->find(array('loc'=>array('$near'=>array(floatval($this->userLongitude),floatval($this->userLatitude)))))->limit(3); 

我是新來蒙戈,但我敢肯定,代碼是正確的。它返回值......只是錯誤的。下面是var_dump(iterator_to_array($result));輸出:

array 
    '4e8e0e67597535e4cb002092' => 
     array 
     'stop_id' => float 373055431 
     'stop_name' => string 'STOP A' (length=34) 
     'loc' => 
     array 
      0 => float -##.937874 
      1 => float ##.442722 
    '4e8e0e64597535e4cb00022d' => 
     array 
     'stop_id' => float 4245689695 
     'stop_name' => string 'STOP B' (length=32) 
     'loc' => 
     array 
      0 => float -##.937515 
      1 => float ##.442692 
    '4e8e0e67597535e4cb0020af' => 
     array 
     'stop_id' => float 134217173 
     'stop_name' => string 'STOP C' (length=21) 
     'loc' => 
     array 
      0 => float -##.938965 
      1 => float ##.443787 

一切都在[經度,緯度]格式,如蒙戈文檔要說到做到。我不知道是什麼導致了不同的結果,除了可能是我弄糟了PHP查詢,但它返回的數據。怎麼了?

爲了簡潔起見,我已經刪除了這些ID,並且更改了一些除私密性以外無關緊要的數據(即##隱藏程度和停用名稱是不同的 - 如果要查看那些,我可以編輯它,但一切是不變)

編輯:解決 我的代碼過濾/解析經度和緯度也被截斷統籌只有兩個小數位數。當我直接使用控制檯時,並沒有發生任何截斷。

+0

只是一個瘋狂的猜測,但這可能是因爲你有64位版本的MongoDB和32位版本的PHP?我可能是錯的,因爲你使用所有的浮點數而不是整數,但仍然有些懷疑。 –

+0

var_dump是什麼'array('loc'=> array('$ near'=> array(floatval($ this-> userLongitude),floatval($ this-> userLatitude))))'return? – DhruvPathak

+0

@Mechcozmo你應該在下面添加你的答案:) – Stennie

回答

0

這個問題存在於我的PHP代碼中。我自己的錯。請參閱原始問題中的編輯。

相關問題