mongodb - 如何使用 spring data mongodb @DBRef 进行分页

标签 mongodb pagination spring-data-mongodb

我想使用 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/

相关文章:

javascript - 如何使当前页面菜单在分页时突出显示?

java - mongodb-3.6.0 的 Spring 数据

mongodb - 如何在 spring-data mongodb 中将 updateOption 与 arrayFilters 一起使用?

mongodb - node.js - 无法让 mongodb 工作,可能安装错误?

java - JSP 连续滚动 在 session 中存储页面变量

ios - 在 Firebase 中对大量数据进行分页的最有效方法

mongodb - 如何使用 Spring Data MongoDB 结合文本和地理查询?

MongoDB 条件投影

windows - 如何在 Windows 中连接到 MongoDB?

python - MongoEngine - 如何使用 ObjectID 从 GridF 获取文件