如何在 spring 数据 mongodb 中获取投影中的 int 数组字段的总和
how to get sum of int array field in projection in spring data mongodb
集合中的示例文档
{
"_id" : 2,
"student" : "Ryan",
"homework" : [
5,
6,
5
],
"quiz" : [
8,
8
],
"extraCredit" : 8
}
mongodb
中的聚合查询
db.scores.aggregate([
{
$project : {
_id:"$_id",
hSum : { $sum: "$homework" },
qSum : { $sum: "$quiz"},
}
}])
以上聚合查询的输出
{
"_id" : 2,
"hSum" : 16,
"qSum" : 16
}
我想将上面的 mongo 查询转换为 spring-数据格式。
我想在 spring 数据中使用 projectionOperations 进行聚合。用projectionOperation怎么写?
这应该有效
MatchOperation matchOperation = match(Criteria.where("_id").is(2));
AggregationExpression homeworkExpression = AccumulatorOperators.Sum.sumOf("homework");
AggregationExpression quizExpression = AccumulatorOperators.Sum.sumOf("quiz");
ProjectionOperation projectionOperation = project("someId").and(homeworkExpression).as("hSum")
.and(quizExpression).as("qSum");
Aggregation aggregation = newAggregation( matchOperation, projectionOperation);
AggregationResults<Result> results = mongoTemplate.aggregate(aggregation, "ScoresColletionName", Result.class);
您可以像这样创建一个名为 Result 的 class 来获取值
@Getter
@Setter
class Result {
private int someId;
private int hSum;
private int qSum;
}
集合中的示例文档
{
"_id" : 2,
"student" : "Ryan",
"homework" : [
5,
6,
5
],
"quiz" : [
8,
8
],
"extraCredit" : 8
}
mongodb
中的聚合查询db.scores.aggregate([
{
$project : {
_id:"$_id",
hSum : { $sum: "$homework" },
qSum : { $sum: "$quiz"},
}
}])
以上聚合查询的输出
{
"_id" : 2,
"hSum" : 16,
"qSum" : 16
}
我想将上面的 mongo 查询转换为 spring-数据格式。 我想在 spring 数据中使用 projectionOperations 进行聚合。用projectionOperation怎么写?
这应该有效
MatchOperation matchOperation = match(Criteria.where("_id").is(2));
AggregationExpression homeworkExpression = AccumulatorOperators.Sum.sumOf("homework");
AggregationExpression quizExpression = AccumulatorOperators.Sum.sumOf("quiz");
ProjectionOperation projectionOperation = project("someId").and(homeworkExpression).as("hSum")
.and(quizExpression).as("qSum");
Aggregation aggregation = newAggregation( matchOperation, projectionOperation);
AggregationResults<Result> results = mongoTemplate.aggregate(aggregation, "ScoresColletionName", Result.class);
您可以像这样创建一个名为 Result 的 class 来获取值
@Getter
@Setter
class Result {
private int someId;
private int hSum;
private int qSum;
}