如何在 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;
}