所以我有一些数据是这样的:
[
{
"_id": "5ba41d8c5f60a647fc792c28",
"key": "CPU Usage",
"signaler": "lookup",
"time": "2018-09-20T22:22:04.515Z",
"status": "alarm"
},
{
"_id": "5ba41d8c5f60a647fc792c2a",
"key": "NETWORK Usage",
"signaler": "engine",
"time": "2018-09-20T22:22:04.516Z",
"status": "warning"
},
{
"_id": "5ba41d8c5f60a647fc792c29",
"key": "NETWORK Usage",
"signaler": "engine",
"time": "2018-09-09T22:22:04.516Z",
"status": "alarm"
},
{
"_id": "5ba41d8c5f60a647fc792c2d",
"key": "CPU Usage",
"signaler": "evaluator",
"time": "2018-09-09T22:22:04.840Z",
"status": "alarm"
},
{
"_id": "5ba41d8c5f60a647fc792c2b",
"key": "RAM Usage",
"signaler": "engine",
"time": "2018-09-01T22:22:04.840Z",
"status": "alarm"
}
]
key
signaler
可以是任何字符串,
status
一定是其中之一
alarm
warning
或
normal
我想写一个聚合
+
钥匙
预期产量:
[
{
"_id": {
"signaler": "lookup",
"key": "CPU Usage"
},
"alarmsWeek": 1,
"warningsWeek": 0,
"alarmsMonth": 1,
"warningsMonth": 0,
"alarmsAllTime": 1,
"warningsAllTime": 0
},
{
"_id": {
"signaler": "engine",
"key": "Network Usage"
},
"alarmsWeek": 0,
"warningsWeek": 1,
"alarmsMonth": 1,
"warningsMonth": 1,
"alarmsAllTime": 1,
"warningsAllTime": 1
},
{
"_id": {
"signaler": "evaluator",
"key": "CPU Usage"
},
"alarmsWeek": 0,
"warningsWeek": 0,
"alarmsMonth": 1,
"warningsMonth": 0,
"alarmsAllTime": 1,
"warningsAllTime": 0
},
{
"_id": {
"signaler": "engine",
"key": "RAM Usage"
},
"alarmsWeek": 0,
"warningsWeek": 0,
"alarmsMonth": 0,
"warningsMonth": 0,
"alarmsAllTime": 1,
"warningsAllTime": 0
}
]
我知道如何编写计算所有时间的警告和警报的小组阶段,但我不确定如何进行计时,特别是因为它们是“堆积”的,即上周的计数也将包含在上月的计数中。
[
{
"$group": {
"_id": {
"signaler":"$signaler",
"key": "$key"
},
"totalWarnings": {
"$sum": {
"$cond": [
{"$eq": [ "warning", "$level" ] },
1,
0
]
}
},
"totalAlarms": {
"$sum": {
"$cond": [
{"$eq": [ "alarm", "$level" ] },
1,
0
]
}
}
}
},
{
"$project": {
"_id": { "$concat": ["$_id.key", "+", "$_id.signaler"] },
"key": "$_id.key",
"signaler": "$_id.signaler",
"totalAlarms": 1,
"totalWarnings": 1
}
}
]