简体   繁体   English

如何使用Spring Data MongoDB聚合在组中使用总和和条件

[英]how to use sum and condition in group using spring data mongodb aggregation

db.test.aggregate(
   [ {
       $group:
         {
           _id: "$id",
           "total":{$sum: 1},
           "live" : { $sum : {$cond : { if: { $eq: ["$status",A"]},then: 1, else: 0}}},
           "chat_hrs" :{ $avg: { $subtract: [ "$end_time", "$start_time" ] } }}}]).

Kindly help me to write springmvc coding to use mongodb aggregation for the above query. 请帮助我编写springmvc编码,以将mongodb聚合用于上述查询。

You can use the below aggregation pipeline. 您可以使用以下聚合管道。

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
import static org.springframework.data.mongodb.core.aggregation.ArithmeticOperators.*;
import static org.springframework.data.mongodb.core.aggregation.ConditionalOperators.when;
import static org.springframework.data.mongodb.core.query.Criteria.where;

Aggregation aggregation = 
           newAggregation(
               project("id").
                  and(when(where("status").is("A")).then(1).otherwise(0)).as("status").
                  and(Subtract.valueOf("end_time").subtract("start_time")).as("diffTime"),
               group("$id").count().as("total").sum("status").as("live").avg("diffTime").as("chat_hrs"));

Generated Mongo Query: 生成的Mongo查询:

[{
    "$project": {
        "id": 1,
        "status": {
            "$cond": {
                "if": {
                    "$eq": ["$status", "A"]
                },
                "then": 1,
                "else": 0
            }
        },
        "diffTime": {
            "$subtract": ["$end_time", "$start_time"]
        }
    }
}, {
    "$group": {
        "_id": "$id",
        "total": {
            "$sum": 1
        },
        "live": {
            "$sum": "$status"
        },
        "chat_hrs": {
            "$avg": "$diffTime"
        }
    }
}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM