[英]Java / MongoTemplate Aggregation, Group and Sum not grouping as expected
[英]How to sum a mongodb inner field and push it during grouping using MongoTemplate
我可以在 MongoDB 控制台的推送操作中使用總和。 但是,我不知道如何使用 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);
問題是我想要my_field的總和,但它在這里作為my_field的數組出現(因為我直接使用推送)。 我可以在推送操作中使用上述總和來實現相同的目的。 但無法將其用於 MongoTemplate。 我的應用程序在 Spring 引導中。 我還查看了這些方法的文檔,但找不到太多。
此外,我也嘗試在現場直接使用.sum()(不使用推送),但這對我不起作用,因為 my_field 是一個內部 object,它不是一個數字,而是分組后的一個數字數組。 這就是為什么我需要使用 push 和 sum 組合。
對此的任何幫助表示贊賞。 提前致謝。
我能夠使用以下代碼使其工作:
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);
我在投影階段本身使用了AccumulatorOperators.Sum並對內部字段求和並獲得所需的 output。 然后我將它傳遞到分組階段,在那里我進行計數聚合,因為我也需要該數據,然后必須將生成的所有數據投影為 output。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.