如何在Spring Data mongodb中使用自定义过滤器进行分页和排序?

时间:2017-10-16 06:30:26

标签: spring-boot spring-data spring-mongo spring-mongodb

在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且&lt; 20的过滤器数据怎么做?但查询我想要动态生成

1 个答案:

答案 0 :(得分:0)

您可以参考以下代码:

@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));
      }

}