Java 如何在Spring Data MongoDB中使用Sum SQL?
我想对price.value列的值求和,其中validatedAt列介于startDate和endDate之间。 所以我想要一个大整数作为和值的结果。 这就是我所尝试的:Java 如何在Spring Data MongoDB中使用Sum SQL?,java,spring-data,aggregation-framework,spring-data-mongodb,Java,Spring Data,Aggregation Framework,Spring Data Mongodb,我想对price.value列的值求和,其中validatedAt列介于startDate和endDate之间。 所以我想要一个大整数作为和值的结果。 这就是我所尝试的: final List<AggregationOperation> aggregationOperations = new ArrayList<>(); aggregationOperations.add(Aggregation.match(where("validated
final List<AggregationOperation> aggregationOperations = new ArrayList<>();
aggregationOperations.add(Aggregation.match(where("validatedAt").gte(startDate).lt(endDate)));
aggregationOperations.add(Aggregation.group().sum("price.value").as("total"));
final Aggregation turnoverAggregation = Aggregation.newAggregation(OrderEntity.class, aggregationOperations);
return this.mongoOperations.aggregate(turnoverAggregation, OrderEntity.class, BigInteger.class).getUniqueMappedResult();
有什么帮助吗?我通过创建一个具有BigInteger属性的类解决了这个问题:
private class Total {
private int total;
}
return this.mongoOperations.aggregate(turnoverAggregation, OrderEntity.class, Total.class).getUniqueMappedResult();
你不需要为此添加新的pojo。当您需要映射更多字段并且希望spring自动映射这些字段时,这将非常有用 解决此问题的正确方法是使用BasicDBObject,因为MongoDB将所有值存储为键值对
return this.mongoOperations.aggregate(turnoverAggregation, OrderEntity.class, BasicDBObject.class).getUniqueMappedResult().getInt("total");
旁注:货币值应该使用Double/BigDecimal。什么不起作用?没有结果?错误?where条件本身是否返回任何数据?我编辑了我的问题。您是否尝试使用Long?我不知道你为什么期望一个大整数如果你看一下BigInteger JavaDoc,这个错误是有意义的。不是没有参数的构造函数。long不起作用。那我应该放什么呢?很好:谢谢!这是一个常规的int,而不是BigInteger。
return this.mongoOperations.aggregate(turnoverAggregation, OrderEntity.class, BasicDBObject.class).getUniqueMappedResult().getInt("total");