注意:指定的代码未经测试,仅作为指针供您参考
以下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