Различные результаты от драйвера PHP и консоли MongoDB при использовании $ near - PullRequest
0 голосов
/ 07 октября 2011

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

1 Ответ

0 голосов
/ 10 декабря 2012

Проблема существовала в моем PHP-коде. Моя собственная вина См. Правку в оригинальном вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...