gpt4 book ai didi

java - 我应该如何使用 Spring Data MongoDB 计算由另一个分组的字段总和

转载 作者:行者123 更新时间:2023-12-04 07:50:48 25 4
gpt4 key购买 nike

我有一个看起来像这样的用户集合 -

{ "post": "teacher",
"salary": 4500
},
{ "post": "teacher",
"salary": 9000
},
{ "post": "principal",
"salary": 7000
},
{ "post": "teacher",
"salary": 4500
}
我想把所有老师的总工资一起计算,校长的工资也一样。所以我想要一些看起来像
"teachers_salary": 18000
"principals_salary": 7000
我想使用聚合,但我没有得到所需的输出。如果你们中的任何人都可以帮助我找到解决方案,那将非常有帮助。

最佳答案

这是使用 spring-data-mongodb 聚合的示例。
假设 PostTotalSalary.class 的结果模型对象:

public class PostTotalSalary {
private String post; // "teacher" or "principal"
private Integer totalSalary;
}
我们将创建一个 GroupOperation 来收集具有相同值的所有文档,键为“post”
GroupOperation groupByPostAndSumSalary = group("post")
.sum("salary")
.as("totalSalary");
我们现在可以使用 spring-data-mongodb 创建聚合,然后将结果映射到结果模型对象(假设集合名称为“posts”):
Aggregation aggregation = Aggregation.newAggregation(groupByPostAndSumSalary);
AggregationResults<PostTotalSalary> groupResults = mongoTemplate.aggregate(aggregation, "posts", PostTotalSalary.class);
如果你想要一个列表,AggregationResults 有 getMappedResults 方法来做到这一点:
List<PostTotalSalary> mappedResults = groupResults.getMappedResults();
最终结果将是
[
{
"post" : "teacher",
"totalSalary" : "18000" // the total of all salaries for every "teacher" document
},
{
"post" : "principal",
"totalSalary" : "7000" // the total of all salaries for every "principal" document
}
]

关于java - 我应该如何使用 Spring Data MongoDB 计算由另一个分组的字段总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com