Как использовать пейджинг и сортировку в Spring Data 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 и ‹20. Как это сделать? Но запрос, который я хочу генерировать динамически


person Vazgen Torosyan    schedule 16.10.2017    source источник
comment
см. jira.spring.io/browse/DATAMONGO-1481   -  person Jens Schauder    schedule 15.01.2018


Ответы (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));
      }

}
person akashdeep kashyap    schedule 24.07.2019