Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Data MongoDB中使用Sum SQL?_Java_Spring Data_Aggregation Framework_Spring Data Mongodb - Fatal编程技术网

Java 如何在Spring Data MongoDB中使用Sum SQL?

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

我想对price.value列的值求和,其中validatedAt列介于startDate和endDate之间。 所以我想要一个大整数作为和值的结果。 这就是我所尝试的:

        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");