//Aggregation query for events to summarise the nodes by current state.
Code Block | ||
---|---|---|
| ||
db.getCollection('nodes').aggregate([
//get all nodes from the group HQDEV
{
$match: {group: "HQDev"}
},
//Get all the states for the matched nodes
{
$lookup: {
from: "state",
localField: "_id",
foreignField: "node",
as: "states"
}
},
//unwinds the states array creating a document per state with node config data
{
$unwind: {
path: "$states"
}
},
//We only want open states
{
$match: {'states.state': {$eq: 'open'}}
},
// group by the node, the state and the stateful element
{
$group : {
_id : {node: "$_id", state: "$states.state", stateful: "$states.stateful" },
total: {$sum: 1}
}
},
//Then group by node and collecting all the states for the node
{
$group : {
_id : "$_id.node",
states: { $push: { state: "$_id.state", stateful: "$_id.stateful", count: "$total"}}
}
},
]) |
Aggregation query for events to summarise the events by the priority.
...