Не можете да направите това с тръбопровода за агрегиране. Трябва да разберете, че агрегирането на MongoDB е поредица от специални оператори, приложени към колекция. Когато изпълнявате тръбопровод за агрегиране, MongoDB прехвърля операторите един към друг, т.е. изходът на даден оператор става вход на следващия оператор. Резултатът от всеки оператор е нова колекция от документи.
Следователно това, което се опитвате да постигнете в горното, може просто да бъде пренаписано като следния конвейер, без да е необходимо първо да създавате масив от документи:
var collection = db.collection('member'),
pipeline = [
{ "$match": { createdDate: currentDate, country: 'BD' } },
{
"$group": {
"_id": { "memberType": "$memberType", "country": "$country" },
"memberCount": {
"$sum": { "$cond":[ { "$gt": ["$numberOfInvitees", 0] }, 1, 0 ] }
},
"sameCount": { "$sum": 1 }
}
}
];
collection.aggregate(pipeline, function(err, result){
if (err) throw err;
console.log(result);
});
АКТУАЛИЗАЦИЯ
Следвайки промените във вашия въпрос, стартирането на следния конвейер за агрегиране ще ви даде желания резултат:
var collection = db.collection('member'),
pipeline = [
{ "$match": { createdDate: currentDate, country: 'BD' } },
{
"$group": {
"_id": {
"memberType": "$memberType",
"country": "$country"
},
"invitees":{
"$push": {
"memberID": "$memberID",
"count": "$numberOfInvitees"
}
},
"inviteesList": { "$push": "$numberOfInvitees" },
"memberCount": { "$sum": 1 }
}
},
{ "$unwind": "$invitees" },
{ "$unwind": "$inviteesList" },
{
"$group": {
"_id": "$invitees.memberID",
"sameInviteesCount": {
"$sum": {
"$cond": [
{ "$eq": ["$inviteesList", "$invitees.count"] },
1, 0
]
}
},
"lessInviteesCount": {
"$sum": {
"$cond":[
{ "$lt": ["$inviteesList", "$invitees.count"] },
1, 0
]
}
},
"memberCount": { "$first": "$memberCount" }
}
}
];
collection.aggregate(pipeline, function(err, result){
if (err) throw err;
console.log(result);
});