Nie możesz tego zrobić za pomocą potoku agregacji. Należy zrozumieć, że agregacja MongoDB to seria specjalnych operatorów stosowanych do kolekcji. Podczas wykonywania potoku agregacji MongoDB łączy ze sobą operatory, tj. dane wyjściowe operatora stają się danymi wejściowymi następującego operatora. Wynikiem każdego operatora jest nowy zbiór dokumentów.
Dlatego to, co próbujesz osiągnąć w powyższym, można po prostu przepisać na następujący potok bez konieczności tworzenia najpierw tablicy dokumentów:
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);
});
AKTUALIZUJ
Kontynuacja zmian w pytaniu, uruchomienie następującego potoku agregacji da pożądany wynik:
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);
});