Какой правильный запрос для геопространственного запроса Doctrine ODM? - PullRequest
2 голосов
/ 18 января 2012

Я настроил классы, как описано в
http://www.doctrine -project.org / docs / mongodb_odm / 1.0 / en / reference / geospatial-query.html

Мой двумерный индекс установлен правильно в mongo

> db.system.indexes.find()                                          
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "pfcd_dev.media", "name" : "_id_" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "pfcd_dev.events", "name" : "_id_" }
{ "v" : 1, "key" : { "coordinates" : "2d" }, "ns" : "pfcd_dev.events", "name" : "coordinates_" }

Когда я запускаю следующую команду в оболочке mongo, я получаю множество результатов:

db.runCommand( { geoNear : "events" , near : [50,60], num : 10 } )

Я перепробовал всеследующие варианты для near(), все возвращают нулевые результаты

$places = $this->dm->createQueryBuilder('\Application\Event')->field('coordinates')->near('[50,60]')->getQuery()->execute();
$places = $this->dm->createQueryBuilder('\Application\Event')->field('coordinates')->near('50,60')->getQuery()->execute();
$places = $this->dm->createQueryBuilder('\Application\Event')->field('coordinates')->near(50,60)->getQuery()->execute();
$places = $this->dm->createQueryBuilder('\Application\Event')->field('coordinates')->near(array(50,60))->getQuery()->execute();

Документация на сайте Doctrine, похоже, немного не в порядке.Просто для записи, я создал гистограмму, показывающую мои занятия (в трюке).https://gist.github.com/1627491

Это вывод debug()

$this->dm->createQueryBuilder('\Application\Event')->field('coordinates')->near('50,60')->debug();

    Array
    (
        [type] => 10
        [mapReduce] => Array
            (
                [map] => 
                [reduce] => 
                [options] => Array
                    (
                    )

            )

        [near] => Array
            (
                [coordinates] => 50,60
            )

    )

1 Ответ

3 голосов
/ 26 января 2012

Вы пытались избавиться от extends Base для своих моделей?

Вы также можете попробовать что-то вроде:

$places = $this->dm->createQueryBuilder('\Application\Event')->field('coordinates.latitude')->near(50)->field('coordinates.longitude')->near(60)->getQuery()->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...