Spring Boot & Mongo自定义查询如何添加日期降序排序?
给Spring Data MongoDB自定义查询加日期降序排序的几种方法
先直接答你的疑问:完全可以用OrderByDateDesc这类方法名后缀实现排序,同时还有更灵活的方式结合Pageable参数来指定排序。下面分情况给你讲清楚:
一、用方法名后缀快速实现固定排序
Spring Data MongoDB支持通过方法名后缀自动生成排序逻辑,哪怕你已经用了@Query写自定义查询条件,方法名里的排序后缀依然会生效。你只需要把方法名改成这样:
@Query("{'additionalInfo.suspicious' : true}") List<Trip> findSuspiciousTripsByFleetIdOrderByDateDesc(String fleetId, Pageable pageable);
这里要注意个小细节:如果你的Pageable参数里也指定了排序规则,那Pageable里的排序会优先生效,覆盖方法名后缀的排序逻辑。
二、通过Pageable传递动态排序(推荐)
这种方式更灵活,适合需要动态调整排序方向或字段的场景。你不用改Repository里的方法定义,只需要在调用方法时,传入带排序规则的Pageable对象就行:
调用代码示例:
// 先定义按date字段降序的排序规则 Sort dateDescSort = Sort.by(Sort.Direction.DESC, "date"); // 组装分页参数:页码(从0开始)、每页条数、加上刚才的排序规则 Pageable pageable = PageRequest.of(0, 10, dateDescSort); // 调用查询方法 List<Trip> suspiciousTrips = tripRepository.findSuspiciousTripsByFleetId("目标车队ID", pageable);
这种方式的好处是排序规则可以随时调整,不用动Repository层的代码,适配更多业务场景。
三、用@Query的sort属性固定排序(可选)
另外,Spring Data MongoDB的@Query注解还自带sort属性,能直接在注解里写死排序规则,比如:
@Query(value = "{'additionalInfo.suspicious' : true}", sort = "{'date' : -1}") List<Trip> findSuspiciousTripsByFleetId(String fleetId, Pageable pageable);
这里-1是MongoDB的语法,代表降序(1就是升序)。不过这种方式排序规则是固定死的,没法动态改,适合排序逻辑不会变的场景。
总结一下:如果排序规则固定,用方法名后缀或@Query的sort属性都很方便;如果需要动态调整排序,优先用Pageable传递排序规则。
内容的提问来源于stack exchange,提问作者Orkun
相关产品推荐
相关产品推荐

