//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' } } }, //Join with the event which created this state, we will need this later for the priority { $lookup: { from: "events", localField: "states.eventid_down", foreignField: "_id", as: "_event" } }, { $unwind: { path: "$_event" } }, // group by the node, and accumlate its states { $group: { _id: "$_id", states: { $push: { state: "$states.state", stateful: "$states.stateful", priority: "$_event.priority" } } } }, ]) |
...