gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:28:16 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com