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,並且更改了一些除私密性以外無關緊要的數據(即##隱藏程度和停用名稱是不同的 - 如果要查看那些,我可以編輯它,但一切是不變)
編輯:解決 我的代碼過濾/解析經度和緯度也被截斷統籌只有兩個小數位數。當我直接使用控制檯時,並沒有發生任何截斷。
只是一個瘋狂的猜測,但這可能是因爲你有64位版本的MongoDB和32位版本的PHP?我可能是錯的,因爲你使用所有的浮點數而不是整數,但仍然有些懷疑。 –
var_dump是什麼'array('loc'=> array('$ near'=> array(floatval($ this-> userLongitude),floatval($ this-> userLatitude))))'return? – DhruvPathak
@Mechcozmo你應該在下面添加你的答案:) – Stennie