#java #mongodb
#java #mongodb
Вопрос:
Я новичок в MongoDB и уже очень долгое время пытаюсь получить несколько сортировок с помощью java api.
Итак, мои данные представлены в виде :
{
"id":1,
"name":"sam",
"timestamp":"2015-10-24 19:50:53"
}
Я пытаюсь получить самые последние 10 записей на основе метки времени. Как только я получу это, я хочу отсортировать результат на основе имени и метки времени.
Это дает мне правильный отсортированный результат из последних 10 записей: .sort (новый документ («временная метка», -1)).limit(10)
Но если я добавлю дополнительные параметры сортировки, это приведет к сортировке всего результирующего набора.
Я пытаюсь получить последние 10 записей, и как только у меня будет результат, я хочу отсортировать по временной метке в порядке возрастания, а затем по имени в случае совпадения.
Ответ №1:
Кажется, то, что вы пытаетесь сделать, невозможно. Как описано в документах mongo, сортировка всегда выполняется до предела. Итак, делаем что-то вроде
.sort({timestamp: -1}).limit(10).sort({timestamp: 1, name: 1})
это просто приведет к тому, что первая сортировка будет перезаписана второй сортировкой.
Это просто эквивалентно
sort({timestamp: 1, name: 1}).limit(10)
Итак, я думаю, что лучше всего выбрать 10 новейших записей из Mongo, а затем снова отсортировать их в коде Java в нужном вам порядке (временная метка по возрастанию и имя по возрастанию).