Du burde have læst svaret ordentligt, da der allerede var en anden alternativ liste og forklaring på, hvorfor det forventede resultat, du ønsker fra det, du brugte, ville være anderledes.
I stedet vil du have denne, som respekterer de mulige multiple "PASS" eller "FAIL":
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) {
}
);
Hvilket er en slags "kombination" af tilgange. Den første er at få den "sidste" ved runTime, som du havde forventet. Det næste er at nedbryde arrayet og denne gang faktisk "opsummere" de mulige forekomster af bestået eller mislykket, snarere end blot at registrere en 1
for enten bestået eller ikke bestået i arrayet, tælles det faktiske "bestået" eller "ikke bestået".
Med resultater:
{
"_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")
}