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