Правильная индексация и сортировка с MongoDB - PullRequest
2 голосов
/ 11 октября 2011

У меня довольно сложный запрос, который я выполняю.Я включил его ниже, но, по сути, у меня есть запрос местоположения в сочетании с $ или и $ в запросе, которые должны быть отсортированы по дате / времени.Всякий раз, когда я запускаю полный запрос, он возвращается в порядке возрастания, а не в порядке убывания.

Если я вытаскиваю часть запроса о местоположении, он успешно возвращает результаты в правильном порядке, но как только я помещаю компонент locationзапроса обратно, он продолжает сбой.

Вот запрос, написанный на php:

$query = array( 
        '$or' => array(
            array( ISPUBLIC => true ), 
            array( GROUP_INVITES.".".TO.".".INVITE_VAL => array( '$in' => $user_groups ) )
        ),
        LOC => array( '$near' => array( (float)$lon , (float)$lat ), '$maxDistance' => 1 )  //Using 1 degree for the max distance for now
    );

$res = $this->db->find( $query )->sort(array('ts'=>-1))->limit($limit)->skip($start);

Используемые поля являются константами, которые сопоставляются с полями в базе данных.Мое первое предположение было, что индексы не настроены должным образом, но как мне это индексировать при объединении геопространственных запросов с другими?

ОБНОВЛЕНИЕ

Мне удалось воспроизвести проблему, упростив запрос до:

$query = array( 
    HOLLER_GROUP_INVITES.".".HOLLER_TO.".".INVITE_VAL => array( '$in' => $user_groups ),
    HOLLER_LOC => array( '$near' => array( (float)$lon , (float)$lat ), '$maxDistance' => 1 )
);

ОБНОВЛЕНИЕ 2

Я запустил дополнительные тесты, и кажется, что, когда лимит снят, он сортируется в правильном направлении.Понятия не имею, что здесь происходит.

1 Ответ

1 голос
/ 11 октября 2011

На этот вопрос, похоже, есть ответ: Сортировка результатов MongoDB GeoNear по чему-то другому, кроме расстояния? .... очевидно, $ near уже выполнял сортировку.Если вы просто хотите ограничить в пределах определенной границы, но сортировать по чему-то другому, вы должны использовать $ внутри вместо $ рядом.

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