Как сортировать по значениям карты с Pageable - PullRequest
0 голосов
/ 17 мая 2019

У меня есть приложение SpringBoot с контроллером REST, и мне нужно выполнить сортировку по свойствам объекта, включая значения карты.

Вот мой класс объекта:

@Document
data class Event(
@Id
val id: CompoundId,

@Indexed
val timestamp: Instant,

val description: String,

val values: Map<String, Any> = HashMap()
)

Мой контроллер REST GET:

@GetMapping("/")
fun getEvents(
        @PageableDefault(sort = ["timestamp"], direction = Sort.Direction.ASC)
        pageable: Pageable?
): Collection<Event> = mongoRepository.find(pageable)

Кроме того, я использую MongoDB:

override fun find(pageable: Pageable?): Collection<Event> {
    Query().apply {
        pageable?.let { with(pageable) }
        return mongoTemplate.find(this, Event::class.java)
    }
}

Я пытаюсь сделать такие запросы: http://localhost:8080?sort=values,DESC, и я вижу, что порядок изменился, но я не могу понятькакие параметры он сортировал.

Можно ли отсортировать по параметрам карты с помощью Pageable, например http://localhost:8080?sort=values.someKeyInTheMap,DESC?

1 Ответ

1 голос
/ 17 мая 2019

Когда вы сортируете, используя http://localhost:8080? Sort = values, DESC , Mongo будет сравнивать BSON в следующем порядке:

  1. MinKey (внутренний тип)
  2. Null
  3. Числа (целые, длинные, двойные)
  4. Символ, строка
  5. Объект
  6. Массив
  7. BinData
  8. ObjectId
  9. Булево
  10. Дата
  11. Отметка времени
  12. Регулярное выражение
  13. MaxKey (внутренний тип)

Об использовании вложенных свойств, я не знаю, какую версию вы используете, но есть проблема с сортировкой по вложенным свойствам: https://jira.spring.io/browse/DATAREST-976?jql=text%20~%20%22sort%20nested%22%20ORDER%20BY%20created%20DESC

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