代码之家  ›  专栏  ›  技术社区  ›  Adarsh Patel

spring data mongodb中投影中int数组字段求和的方法

  •  4
  • Adarsh Patel  · 技术社区  · 7 年前

    收集的样本文件

    {
        "_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编写?

    1 回复  |  直到 7 年前
        1
  •  4
  •   pvpkiran    7 年前

    这应该行得通

    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;
    }