【问题标题】:How to sort by map values with Pageable如何使用 Pageable 按地图值排序
【发布时间】:2019-05-17 14:58:36
【问题描述】:

我有一个带有 REST 控制器的 SpringBoot 应用程序,我需要按实体属性(包括地图值)进行排序。

这是我的实体类:

@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,按地图参数排序?

【问题讨论】:

    标签: mongodb spring-boot sorting pageable


    【解决方案1】:

    当您使用http://localhost:8080?sort=values,DESC 进行排序时,Mongo 将按照以下顺序比较 BSON:

    1. MinKey(内部类型)
    2. 数字(整数、长整数、双精度数)
    3. 符号、字符串
    4. 对象
    5. 数组
    6. BinData
    7. 对象标识
    8. 布尔值
    9. 日期
    10. 时间戳
    11. 正则表达式
    12. MaxKey(内部类型)

    关于使用嵌套属性,不知道你用的是什么版本,但是对嵌套属性排序有个问题:https://jira.spring.io/browse/DATAREST-976?jql=text%20~%20%22sort%20nested%22%20ORDER%20BY%20created%20DESC

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多