如何使用Spring Data Mongo @DBRef进行分页

3

我想使用Spring Data Mongo进行分页。根据文档,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是否支持带有评论的分页?

1个回答

2

注意:指定的代码未经测试,仅作为指针供您参考

以下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


Robin - 我们如何从自定义列表创建页面?这里我不使用Spring Data mongo repository方法。请帮忙...问候,Neha - user5268786
Pageable API查询不正确,它没有给出总页数。 - user5268786

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接