在Spring Data MongoDB中如何在投影中获取整数数组字段的总和

4

样本集合文档

{
    "_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-Data格式。 我想在Spring Data中使用ProjectionOperations进行聚合。如何使用ProjectionOperation编写?


你目前尝试了什么?我认为你期望的输出不正确。5+6+5=16,8+8=16。 - pvpkiran
我已经在Mongo终端中尝试过了,它给出了所示的输出。查询运行良好。我只想将该查询转换为Spring-Data格式,有什么帮助吗? - Adarsh Patel
5+6+5=25和8+8=18,你能解释一下吗? - pvpkiran
抱歉选择了错误的输出。我展示了ID为1的结果 我的错误 @pvpkiran - Adarsh Patel
聚合操作只有在处理多个文档时才有意义。但如果您只是在单个文档中进行操作,最好直接读取文档并在代码中进行计算。 - pvpkiran
1个回答

4

这应该可以正常工作。

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的类来获取这些值,代码如下:
@Getter
@Setter
class Result {
    private int someId;
    private int hSum;
    private int qSum;
}

如果我手头有一个对象数组,我想要对它们的某个字段求和,应该怎么做? - Wrong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接