आप एकत्रीकरण पाइपलाइन के साथ ऐसा नहीं कर सकते। आपको समझना चाहिए कि 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);
});