У меня довольно сложный запрос, который я выполняю.Я включил его ниже, но, по сути, у меня есть запрос местоположения в сочетании с $ или и $ в запросе, которые должны быть отсортированы по дате / времени.Всякий раз, когда я запускаю полный запрос, он возвращается в порядке возрастания, а не в порядке убывания.
Если я вытаскиваю часть запроса о местоположении, он успешно возвращает результаты в правильном порядке, но как только я помещаю компонент 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
Я запустил дополнительные тесты, и кажется, что, когда лимит снят, он сортируется в правильном направлении.Понятия не имею, что здесь происходит.