【发布时间】:2023-01-09 22:45:38
【问题描述】:
我在 Mongo 中有一个文档列表,每个文档都包含当天某项服务的指标值。方案如下:
_id: ObjectId("..."),
name: '<some_metric_name>',
service: '<service_name>',
timestamp_unix: Long("1635033600000"),
timestamp: '2021-10-24 03:00:00 +0300 EEST',
value: 99.9810785241248
},
我想在 Redash 中有一个仪表板,我可以在其中查看按服务分组的每月这些值的计算平均值。
例如在 4 个月的时间里,它应该是这样的:
| service | date | avg
| my_svc | 01-01-2022 to 31-01-2022 | 99.500
| my_svc | 01-02-2022 to 28-02-2022 | 99.100
| my_svc | 01-03-2022 to 31-03-2022 | 99.400
| my_svc | 01-04-2022 to 30-04-2022 | 99.900
| my_svc_total | 01-01-2022 to 30-04-2022 | 99.475
| my_svc_2 | 01-01-2022 to 31-01-2022 | 99.150
.
.
.
所以我需要一个按月聚合文档的查询,计算平均值并按月和服务对它们进行分组。到目前为止,我有这个可以计算总体平均值:
{
"collection": "metrics",
"aggregate": [
{
"$group": {
"_id": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": {
"$toDate": "$timestamp_unix"
}
}
},
"total_average": {
"$avg": "$value"
}
}
}
]
}
那么我将如何着手实施呢?
【问题讨论】: