Я выполняю запрос MongoDB и пытаюсь изменить способ структурирования вывода. В настоящее время это выглядит следующим образом:
[
{
qClass: [
{
cat: 'Servers',
class: 'High Impact Maintenance',
total: 1
},
{
cat: 'Network.TrafficShapers',
class: 'Maintenance',
total: 16
},
{
cat: 'Network.Hop',
class: 'Core Failure',
total: 2
},
{
cat: 'Office.MFD',
class: 'Failure',
total: 4
},
{
cat: 'Office.Printers',
class: 'Maintenance',
total: 36
},
{
cat: 'Office.MFD',
class: 'Maintenance',
total: 880
},
{
cat: 'Network.TrafficShapers',
class: 'Failure',
total: 47
},
{
cat: 'Servers',
class: 'Core Maintenance',
total: 1
},
{
cat: 'Network.Switches',
class: 'Failure',
total: 5
},
{
cat: 'Servers',
class: 'Performance',
total: 21
},
{
cat: 'Network.Switches',
class: 'High Impact Failure',
total: 4
},
{
cat: 'Network.Firewall',
class: 'Core Failure',
total: 2
},
{
cat: 'Network.Router',
class: 'Failure',
total: 53
},
{
cat: 'Servers',
class: 'High Impact Failure',
total: 3
},
{
cat: 'Office.Printers',
class: 'Performance',
total: 1
},
{
cat: 'Network.TrafficShapers',
class: 'Performance',
total: 3
},
{
cat: 'Network.Switches',
class: 'Maintenance',
total: 1
},
{
cat: 'Servers',
class: 'Failure',
total: 60
},
{
cat: 'Network.Router',
class: 'Performance',
total: 67
},
{
cat: 'Network.Router',
class: 'High Impact Failure',
total: 39
},
{
cat: 'Office.MFD',
class: 'Performance',
total: 5
},
{
cat: 'Network.TrafficShapers',
class: 'High Impact Failure',
total: 593
},
{
cat: 'Network.Router',
class: 'Maintenance',
total: 78
},
{
cat: 'Office.Printers',
class: 'High Impact Failure',
total: 2
},
{
cat: 'Office.Printers',
class: 'Failure',
total: 1
},
{
cat: 'Office.MFD',
class: 'Critical Failure',
total: 48
}
]
}
]
И я надеялся, что он будет структурирован следующим образом:
{
cat: 'Servers',
High Impact Maintenance: 1,
Performance: 24,
Total: 25
}
В общем, вся информация о cat (категории) в одном массиве и иметь имя поля Dynami c для класса. Ниже приведен запрос, который я использую для этого:
db.full_ticket_lists.aggregate(
{
$facet: {
qClass: [
{$match : {"device":{$ne:null},"status":"Open","ticket_class":{$ne:''}}},
{$lookup: { from: "devices", localField: "device", foreignField: "_id", as: "device_link"},},
{$lookup: { from: "device_categories", localField: "device_link.device_category", foreignField: "_id", as: "category_link"},},
{$unwind: "$category_link"},
{$group : {
_id:{"class_name":"$ticket_class", "cat_name":"$category_link.name"},
count: {$sum:1}
},},
{$project:{_id:0,cat:"$_id.cat_name", class:"$_id.class_name",total:"$count"}}
],
}
}
)