...
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" } }
}
},
]) |
...