Я получаю разные результаты в зависимости от того, откуда я спрашиваю. У меня есть «стопы» из коллекции Монго, проиндексированные 2d координатами.
Из консоли Монго:
> 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, но он возвращает данные. Что не так?
Я сократил идентификаторы для краткости и изменил некоторые данные, которые не должны иметь значения, за исключением конфиденциальности (а именно, ## скрывают градусы и названия остановок различны - если важно увидеть те, я могу редактировать его, но все остальное остается нетронутым.)
EDIT: решаемые
Мой код для фильтрации / анализа долготы и широты также усекал координаты до двух знаков после запятой. Когда я использовал консоль напрямую, усечения не было.