Я пытаюсь объединить набор данных в MongoDB для использования в Redash. Я хотел бы разделить агрегированный результат на четыре результата, основываясь на дате, содержащейся в коллекции.
Пример набора данных
{ "_id" : ObjectId("5ca6a9219a6c64190bfbe397"), "threatlevel" : 4, "timestamp" : "1522891861", "devicename" : "abc", "alertsource" : "p1" }
{ "_id" : ObjectId("5ca6a9249a6c64190bfbe3c9"), "threatlevel" : 3, "timestamp" : "1523064661", "devicename" : "acb", "alertsource" : "p1" }
{ "_id" : ObjectId("5ca6a9249a6c64190bfbe3d8"), "threatlevel" : 5, "timestamp" : "1524965461", "devicename" : "bcd", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9249a6c64190bfbe3db"), "threatlevel" : 4, "timestamp" : "1525483861", "devicename" : "abc", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9259a6c64190bfbe3e4"), "threatlevel" : 4, "timestamp" : "1525829461", "devicename" : "def", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9259a6c64190bfbe3e9"), "threatlevel" : 5, "timestamp" : "1526088661", "devicename" : "bcd", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9239a6c64190bfbe3b7"), "threatlevel" : 2, "timestamp" : "1526520661", "devicename" : "def", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9239a6c64190bfbe3b8"), "threatlevel" : 2, "timestamp" : "1527298261", "devicename" : "def", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9239a6c64190bfbe3ba"), "threatlevel" : 1, "timestamp" : "1527816661", "devicename" : "abc", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9239a6c64190bfbe3b9"), "threatlevel" : 1, "timestamp" : "1528335061", "devicename" : "bcd", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9269a6c64190bfbe410"), "threatlevel" : 2, "timestamp" : "1528507861", "devicename" : "abc", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9259a6c64190bfbe3fe"), "threatlevel" : 2, "timestamp" : "1528939861", "devicename" : "def", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9259a6c64190bfbe3fc"), "threatlevel" : 5, "timestamp" : "1529112661", "devicename" : "abc", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9279a6c64190bfbe429"), "threatlevel" : 5, "timestamp" : "1529371861", "devicename" : "def", "alertsource" : "av" }
{ "_id" : ObjectId("5ca6a9279a6c64190bfbe439"), "threatlevel" : 5, "timestamp" : "1530235861", "devicename" : "abc", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9269a6c64190bfbe409"), "threatlevel" : 3, "timestamp" : "1530667861", "devicename" : "def", "alertsource" : "pre" }
{ "_id" : ObjectId("5ca6a9269a6c64190bfbe40a"), "threatlevel" : 1, "timestamp" : "1531013461", "devicename" : "def", "alertsource" : "p1" }
{ "_id" : ObjectId("5ca6a9269a6c64190bfbe408"), "threatlevel" : 2, "timestamp" : "1531359061", "devicename" : "abc", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9259a6c64190bfbe3f5"), "threatlevel" : 2, "timestamp" : "1531704661", "devicename" : "def", "alertsource" : "wine" }
{ "_id" : ObjectId("5ca6a9279a6c64190bfbe425"), "threatlevel" : 4, "timestamp" : "1531877461", "devicename" : "bcd", "alertsource" : "av" }
У меня есть рабочий запрос в отношении агрегации, основанный на "уровне угрозы", который возвращает общее количество за вхождение "уровня угрозы".
{
"collection": "threats",
"$aggregate": [{"$group" : {"_id" : "$ThreatLevel",
"Total" : {"$sum" : 1}}},
{"$sort" : { "_id": 1 }}]
}
Чтобы объяснить лучше, это то, что я хотел бы закончить. Первый квартал будет между 9 и 12 месяцами назад, второй квартал - через 3-6 месяцев, третий квартал - 6-9 и четвертый квартал 3 по настоящее время.
ThreatLevel AlertSource Date Qty
4 p1 Q1 1
3 p1 Q1 1
1 p1 Q2 1
4 av Q1 2
2 av Q1 1
1 av Q2 1
2 av Q2 1
5 av Q2 2
4 av Q2 1
3 pre Q2 1
5 wine Q1 2
2 wine Q1 1
1 wine Q1 1
2 wine Q2 3
5 wine Q2 1
Любая помощь будет действительно присвоена!