gpt4 book ai didi

mongodb - 如何使用spring数据mongodb聚合在组中使用sum和condition

转载 作者:行者123 更新时间:2023-12-03 16:52:50 25 4
gpt4 key购买 nike

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" ] } }}}]).

请帮助我编写 springmvc 编码以使用 mongodb 聚合进行上述查询。

最佳答案

您可以使用以下聚合管道。

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"));

生成的 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"
}
}
}]

关于mongodb - 如何使用spring数据mongodb聚合在组中使用sum和condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43783725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com