根据我的要求,我会得到不同的结果。我有一个由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并更改了除隐私之外无关紧要的一些数据(即##隐藏度数和停止名称不同 - 如果它是关键的看到那些,我可以编辑它,但其他一切都不受影响。)
修改:解决 我过滤/解析经度和纬度的代码也将坐标截断为仅两位小数。当我直接使用控制台时,没有任何截断。
答案 0 :(得分:0)
我的PHP代码中存在问题。我自己的错。请参阅原始问题中的编辑。