使用$ near时,PHP的驱动程序和MongoDB控制台的结果不同

时间:2011-10-06 20:54:57

标签: php mongodb

根据我的要求,我会得到不同的结果。我有一个由2d坐标索引的Mongo集合“停止”。

来自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);

我是Mongo的新手,但我很确定代码是对的。它返回值......只是,错误的。这是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

一切都是[经度,纬度]格式,就像Mongo文档所说的那样。我不知道是什么导致了不同的结果,除了我可能会破坏PHP查询,但它返回数据。怎么了?

我为了简洁而删除了ID并更改了除隐私之外无关紧要的一些数据(即##隐藏度数和停止名称不同 - 如果它是关键的看到那些,我可以编辑它,但其他一切都不受影响。)

修改:解决 我过滤/解析经度和纬度的代码也将坐标截断为仅两位小数。当我直接使用控制台时,没有任何截断。

1 个答案:

答案 0 :(得分:0)

我的PHP代码中存在问题。我自己的错。请参阅原始问题中的编辑。