java—如何对mongodb内部字段求和,并在使用mongotemplate进行分组时推送它

whitzsjs  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(1282)

我可以在mongodb控制台的push操作中使用sum。但是,我不明白如何使用mongotemplate实现同样的功能?

$group : {
     _id: "$some_id",
     my_field: { $push : {$sum: "$my_field" }}
 }

我使用的代码如下:

Aggregation aggregation =
    Aggregation.newAggregation(
        match(matchingCriteria),
        group("some_id")
            .count()
            .as("count")
            .push("my_field")
            .as("my_field")
        project("some_id", "count", "my_field"));
AggregationResults<MyModel> result =
    mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

问题是我想要我的\字段的和,但是它作为\字段的数组出现在这里(因为我直接使用push)。我能够实现同样的推操作内使用上述总和。但不能将其用于mongotemplate。我的应用程序是在 Spring 启动。我也查看了这些方法的文档,但找不到太多。
此外,我还尝试在字段上直接使用.sum()(不使用push),但这对我不起作用,因为我的\u字段是一个内部对象,它不是一个数字,而是分组后的一个数字数组。这就是为什么我需要使用推和组合。
任何有关这方面的帮助都是感激的。提前谢谢。

moiiocjp

moiiocjp1#

我可以使用下面的代码来实现这一点:

Aggregation aggregation =
    Aggregation.newAggregation(
        match(allTestMatchingCriteria),
        project("some_id")
            .and(AccumulatorOperators.Sum.sumOf("my_field"))
            .as("my_field_sum")
        group("some_id")
            .count()
            .as("count")
            .push("my_field_sum")
            .as("my_field_sum"),
        project("some_id", "count", "my_field_sum"));
AggregationResults<MyModel> result =
    mongoTemplate.aggregate(aggregation, "my_collection", MyModel.class);

我在投影阶段使用了acculatoroperators.sum,对内部字段求和,得到所需的输出。然后我将其传递到分组阶段,在分组阶段中,当我需要该数据时,我进行计数聚合,然后必须将生成的所有数据投影为输出。

相关问题