如何在带有自定义过滤器的 Spring Data mongodb 中使用分页和排序?
Posted
技术标签:
【中文标题】如何在带有自定义过滤器的 Spring Data mongodb 中使用分页和排序?【英文标题】:How use Paging and Sorting in Spring Data mongodb with custom filter? 【发布时间】:2018-03-27 14:40:34 【问题描述】:在 Spring Data JPA 中,我们有规范,可以使用规范的分页和排序。
public interface JpaSpecificationExecutor<T>
T findOne(Specification<T> var1);
List<T> findAll(Specification<T> var1);
Page<T> findAll(Specification<T> var1, Pageable var2);
List<T> findAll(Specification<T> var1, Sort var2);
long count(Specification<T> var1);
但是在 MongoRepository 中没有办法使用这样的功能。 我尝试使用 QueryByExampleExecutor,但它非常有限 示例我想要过滤数据的年份 >5 和
【问题讨论】:
见jira.spring.io/browse/DATAMONGO-1481 【参考方案1】:您可以参考以下代码:
@Repository
public class DataRepository `enter code here`
@Autowired
MongoTemplate mongoTemplate;
public Page<Data> filterData(SearchDTO searchDTO)
List<Data> list = null;
Integer offset = Optional.ofNullable(searchDTO.getOffset()).orElse(0);
Integer limit = Optional.ofNullable(searchDTO.getLimit()).orElse(10);
int page = offset / limit;
Pageable pageable = PageRequest.of(page, limit);
Query query = new Query();
/** your filter condition */
// if (!StringUtils.isEmpty(searchDTO.getName()))
// query.addCriteria(Criteria.where("name").is(searchDTO.getName()));
//
query.with(pageable);
list = mongoTemplate.find(query, Data.class);
return PageableExecutionUtils.getPage(list, pageable,
()-> mongoTemplate.count(query, Data.class));
【讨论】:
以上是关于如何在带有自定义过滤器的 Spring Data mongodb 中使用分页和排序?的主要内容,如果未能解决你的问题,请参考以下文章
带有 MyBatis 的 Spring Data JDBC 找不到自定义查询
Spring Security +自定义用户对象附加到会话以过滤请求
Spring Data JPA - 带有“@Param Date”的自定义@Query 不起作用