我们正在做一个从mongoDB获取数据的项目。
@Repository
public interface CustomerRepository extends MongoRepository<Customer,String>{
List<Customer> customers = findByCustomerId(final String customerId);
}
我们希望添加skip/offset和limit参数,以用作findByCustomerId方法的一部分。其中limit用于定义返回的记录数,skip/offset用于定义记录数,在此之后我们需要获取记录。
请帮助我们如何使用MongoRepository以最好的方式实现这一点。
4条答案
按热度按时间7rfyedvj1#
有两种方法可以做到这一点。
1.使用此答案中提到的
@Aggregation
注解。https://stackoverflow.com/a/71292598/8470055例如:
可能需要修改
$match
运算符的查询,以便它更好地反映匹配文档需要满足的条件。1.在query方法中使用
Pageable
参数,并提供调用Repository方法的层中的PageRequest
,如下答案所示。https://stackoverflow.com/a/10077534/8470055对于问题中的代码片段,则变为。
聚合方法更有用。如果结果仅限于几个文档,那么查询方法可以返回
List<Customer>
。如果有很多文档,那么查询方法可以修改为使用Pageable
参数,该参数返回Page<Customer>
,以便对文档进行分页。请参阅Spring Data 和MongoDB文档。
https://docs.spring.io/spring-data/mongodb/docs/3.2.10/reference/html/#mongo.repositories
https://docs.spring.io/spring-data/mongodb/docs/3.2.10/reference/html/#mongodb.repositories.queries.aggregation
https://docs.spring.io/spring-data/mongodb/docs/3.2.10/api/org/springframework/data/mongodb/repository/Aggregation.html
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageRequest.html
MongoDB聚合-https://www.mongodb.com/docs/manual/meta/aggregation-quick-reference/
动态查询
自定义SpringData存储库实现沿着
MongoTemplate
的使用应该有助于实现动态查询。自定义存储库-https://docs.spring.io/spring-data/mongodb/docs/3.2.10/reference/html/#repositories.custom-implementations
MongoTemplate
至https://docs.spring.io/spring-data/mongodb/docs/3.2.10/api/org/springframework/data/mongodb/core/MongoTemplate.htmlbrgchamk2#
一个简单的用例是使用带有Query和SimpleMongoRepository类的自定义存储库。
客户信息库.java
资源库.java
资源储存库实作java
客户服务.java
具有特定标准的参考:https://dzone.com/articles/advanced-search-amp-filtering-api-using-spring-dat
62lalag43#
我已经使用了带有$skip和$limit的Aggregation查询,它工作得很好,当你需要对一个复杂的查询结果进行分页时,它非常有用。对于简单的查询,我使用了spring mongo模板,它接受一个Query对象。Query对象接受一个Pageable对象,你可以在其中定义一个页码和页面大小以及一个排序选项。
对于mongo数据库聚合选项-https://www.mongodb.com/docs/manual/reference/operator/aggregation/limit/https://www.mongodb.com/docs/manual/reference/operator/aggregation/skip/
uqxowvwt4#
另一种(可能更简单)限制查询结果的方法是在使用MongoRepository时在方法声明中添加过滤器。关键字 top 和 first 都可以用来达到这个目标,同时指定所需结果的数量(或者省略它,这样只获得一个结果)。
下面的代码是一个示例,可在 docs.spring.ioMongoRepositories的 * www.example.com * 文档中找到(下面的链接)。
您还可以对查询应用分页(文档中提供了更多详细信息)。
关于排序的一些额外信息:
由于其他的回答也对排序有一些见解,我想在这方面提出其他的选择。
如果您的方法总是以相同的方式对结果进行排序,则可以通过在方法声明中使用 OrderBy 关键字进行排序,然后根据您的用例后跟 Asc 或 Desc。
如果要动态排序结果,可以在方法上使用 Sort 参数并提供。
例如,在方法调用中提供 Sort.by(DESC,“age”) 将定义 { age:-1 } 作为查询的排序。
参考资料:
https://docs.spring.io/spring-data/mongodb/docs/3.2.10/reference/html/#repositories.query-methods