आपको उत्तर को ठीक से पढ़ना चाहिए था, क्योंकि पहले से ही एक और वैकल्पिक सूची और स्पष्टीकरण था कि आपके द्वारा उपयोग किए जाने वाले अपेक्षित परिणाम से आप अलग क्यों होंगे।
इसके बजाय आप इसे चाहते हैं, जो संभावित एकाधिक "पास" या "असफल" का सम्मान करता है:
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) {
}
);
जो दृष्टिकोणों का एक "संयोजन" है। जैसा कि आप उम्मीद कर रहे थे, सबसे पहले रनटाइम द्वारा "आखिरी" प्राप्त करना है। अगला सरणी को तोड़ना है और इस बार वास्तव में पास या असफल होने की संभावित घटनाओं को "योग" करना है, बजाय इसके कि केवल 1
रिकॉर्ड करें सरणी में पास या असफल होने के लिए, वास्तविक "पास" या "असफल" की गणना की जाती है।
परिणामों के साथ:
{
"_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")
}