[英]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.