【问题标题】:Different results from PHP's driver and MongoDB console when using $near使用 $near 时 PHP 的驱动程序和 MongoDB 控制台的结果不同
【发布时间】:2012-12-10 05:50:03
【问题描述】:

根据我从哪里询问,我得到的结果不同。我有一个由二维坐标索引的 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

一切都采用 [longitude,latitude] 格式,就像 Mongo 文档所说的那样。我不知道是什么导致了不同的结果,除了我可能搞砸了 PHP 查询,但它正在返回数据。怎么了?

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

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

【问题讨论】:

  • 只是一个疯狂的猜测,但这可能是因为你有 64 位版本的 MongoDB 和 32 位版本的 php?我可能错了,因为您使用所有浮点数而不是整数,但仍然值得怀疑。
  • array('loc'=>array('$near'=>array(floatval($this->userLongitude),floatval($this->userLatitude)))) 的 var_dump 返回什么?
  • @Mechcozmo 你应该在下面添加你的答案:)

标签: php mongodb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多