Je had het antwoord goed moeten lezen, want er was al een andere alternatieve lijst en uitleg waarom het verwachte resultaat dat je wilt, anders zou zijn dan het resultaat dat je hebt gebruikt.
In plaats daarvan wil je deze, die het mogelijke meervoud "PASS" of "FAIL" respecteert:
Model.aggregate(
[
{ "$sort": { "executionProject": 1, "runEndTime": 1 } },
{ "$group": {
"_id": "$executionProject",
"suiteList": { "$last": "$suiteList" },
"runEndTime": { "$last": "$runEndTime" }
}},
{ "$unwind": "$suiteList" },
{ "$group": {
"_id": "$_id",
"suite-pass": {
"$sum": {
"$cond": [
{ "$eq": [ "$suiteList.suiteStatus", "PASS" ] },
1,
0
]
}
},
"suite-fail": {
"$sum": {
"$cond": [
{ "$eq": [ "$suiteList.suiteStatus", "FAIL" ] },
1,
0
]
}
},
"runEndTime": {"$first": "$runEndTime"}
}},
{ "$sort": { "runEndTime": 1 }}
],
function(err,result) {
}
);
Dat is een soort "combinatie" van benaderingen. De eerste is om de "laatste" door runTime te krijgen zoals je verwachtte. De volgende is om de array op te splitsen en deze keer de mogelijke gevallen van geslaagd of mislukt te "samenvatten", in plaats van alleen een 1
op te nemen. voor ofwel slagen ofwel mislukken in de array, worden de daadwerkelijke "pass" of "fail" geteld.
Met resultaten:
{
"_id" : "Project1",
"suite-pass" : 0,
"suite-fail" : 1,
"runEndTime" : ISODate("2015-08-19T09:46:31.108Z")
}
{
"_id" : "Project2",
"suite-pass" : 2,
"suite-fail" : 0,
"runEndTime" : ISODate("2015-08-19T11:09:52.537Z")
}
{
"_id" : "Project3",
"suite-pass" : 0,
"suite-fail" : 1,
"runEndTime" : ISODate("2015-08-19T11:18:41.460Z")
}