2011-10-06 52 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代码中。我自己的错。请参阅原始问题中的编辑。

相关问题