Множественная сортировка MongoDB

#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 в нужном вам порядке (временная метка по возрастанию и имя по возрастанию).