首页 > 解决方案 > 集合为空时的spring-data-mongodb计数错误

问题描述

这两个查询有什么区别?

此查询在集合上存在或不存在值时都有效。

@Query(value = "{'request.req_number':?0, 'product.prod_number':?1}", count = true)
int myMethod(String requestNumber, String productNumber){...

但是,当集合为空时,这会导致 Nullpointer。

    @Aggregation(pipeline = {"{'$match':{'request.req_number':?0, 'product.prod_number':?1} }","{'$count':'total'}"}) 
int myMethod(String requestNumber, String productNumber){...

java.lang.NullPointerException:在 org.springframework.data.mongodb.repository.query.AggregationUtils.extractSimpleTypeResult 处为空(AggregationUtils.java:192)~[spring-data-mongodb-2.2.1.RELEASE.jar:2.2.1。 RELEASE] 在 org.springframework.data.mongodb.repository.query.StringBasedAggregation.doExecute(StringBasedAggregation.java:114) ~[spring-data-mongodb-2.2.1.RELEASE.jar:2.2.1.RELEASE]

标签: mongodbcountspring-data-mongodb

解决方案


聚合返回“对象”你应该使用这样的东西:

@Data
@AllArgsConstructor
class Count {
    Long total;
}
...
@Aggregation(pipeline = {"{'$match':{'request.req_number':?0, 'product.prod_number':?1} }","{'$count':'total'}"}) 
Count myMethod(String requestNumber, String productNumber){...

推荐阅读