Mic*_*ell 5 pagination mongodb spring-data
我们有一个用例,用户可以为集合传入任意搜索条件,并希望输出分页。使用 Spring Data 存储库,如果我们通过简单的扩展 MongoRepository 并声明一个:
Page<Thing> findByFooAndBarAndBaz(Type foo, Type bar, Type baz, Pageable page)
但是,如果我们自己生成查询,要么使用 fluent 接口,要么构造一个 mongo 字符串并将其包装在一个BasicQuery类中,我找不到将其放入存储库实例的方法。没有:
Page<Thing> findByQuery(Query q, Pageable page)
我已经能够看到的功能。
我也看不到如何MongoTemplate使用 Page 抽象来连接查询功能。
我希望我不必滚动自己的分页(计算跳过和限制参数,我认为这并不难)并直接调用模板,但如果这是最佳选择,我想我可以。
我认为这不能按照我希望的方式完成,但我已经想出了一个解决方法。作为背景,我们将所有用于数据访问的方法放在 DAO 中,一些委托给存储库,一些委托给模板。
MongoTemplate#count(Query, Class)Query#with(Pageable)MongoTemplate#find(Query, Pageable)List<T>从中获取Pageable用于查询的结果和countcountQuery 运行返回的结果,并构造一个新的PageImp返回给调用者。基本上,这DocDbDomain是一个用于测试文档数据库内容的测试域类):
Query countQuery = new BasicQuery(toMongoQueryString(filterString));
Query pageQuery = countQuery.with(pageRequest);
long total = template.count(countQuery, DocDbDomain.class);
List<DocDbDomain> content = template.find(pageQuery, DocDbDomain.class);
return new PageImpl<DocDbDomain>(content, pageRequest, total);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4232 次 |
| 最近记录: |