如何使用spring数据mongo @DBRef进行分页

时间:2015-07-01 06:49:20

标签: mongodb pagination spring-data-mongodb

我想分享Spring Data Mongo.From 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数据mongo是否支持对注释进行分页?

1 个答案:

答案 0 :(得分: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);

如果您使用RepositorySpring-Data-Reposioty),请使用PagingAndSortingRepository