我想使用 Spring Data Mongo 进行分页。从 docs spring data mongo 可以做到:
public interface TwitterRepository extends MongoRepository<Twitter, String> {
List<Twitter> findByNameIn(List<String> names, Pageable pageable);
}
如果 Twitter 文档对象是这样的:
@Document
public class Twitter {
String name;
@DBRef
List<Comment> comments
}
spring data mongo 支持评论分页吗?
最佳答案
注意:指定的代码未经测试,仅供引用
以下 mongo 查询限制了要返回的数组大小:
db.Twitter.find( {}, { comments: { $slice: 6 } } )
上述机制可用于强制分页,如下所示:
db.Twitter.find( {}, { comments: { $slice: [skip, limit] } } )
您可以通过注释您的方法来尝试
@Query(value="{ 'name' : {'$in': ?0} }", fields="{ 'comments': { '$slice': [?1,?2] } }")
List<Twitter> findByNameIn(List<String> names, int skip, int limit);
}
您可以像这样在查询中指定:
Query query = new Query();
query.fields().slice("comments", 1, 1);
mongoTemplate.find(query, DocumentClass.class);
或者您可以尝试直接使用以下命令执行命令:
mongoTemplate.executeCommand("db.Twitter.find( {}, { comments: { $slice: [skip, limit] } } )")
通用分页机制:
通用分页机制仅在文档级别起作用,下面给出了示例。
对于它们,您必须在应用程序级别手动拼接返回的评论。
如果您使用 MongoTemplate
类 ( Spring-Data Docs ),则:
使用org.springframework.data.mongodb.core.query.Query
类的skip()
和limit()
方法进行分页
Query query = new Query();
query.limit(10);
query.skip(10);
mongoTemplate.find(query, DocumentClass.class);
如果您正在使用 Repository
( Spring-Data-Reposioty ) 然后使用 PagingAndSortingRepository
关于mongodb - 如何使用 spring data mongodb @DBRef 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31154359/