अगर आप उल्का हैक एग्रीगेट
का इस्तेमाल कर रहे हैं एक .aggregate()
implement को लागू करने के लिए पैकेज आपके संग्रह पर आदेश, तो यह केवल प्रतिक्रिया में एक सरणी लौटाएगा। तो आपको इसे एक प्रकाशित संग्रह के रूप में काम करने की आवश्यकता है:
Meteor.publish("completedLB,function() {
var self = this;
var results = userCompleted.aggregate([
{ "$match": { "progressState": true } },
{ "$group": {
"_id": "$userId",
"progressState": { "$first": "$progressState" },
"count": { "$sum": 1 }
}},
{ "$sort": { "_id": 1 } }
]);
_.each(results,function(result) {
self.added("client_collection_name",Random.id(), {
userId: result._id,
progressState: result.progressState,
count: result.count
});
});
self.ready();
});
या गलत
शामिल करने के लिए आपके द्वारा सुझाए गए आउटपुट के अनुसार ही मायने रखता है:
{ "$group": {
"_id": "$userId",
"progressState": { "$first": true },
"count": { "$sum": { "$cond": ["$progressState", 1,0] }
}},
{ "$sort": { "_id": 1 } }
एक $cond
संख्यात्मक में बदलने के लिए मूल्यांकन।
जहां मूल एकत्रीकरण में आप मिलान किए गए परिणामों को "कुल" कर रहे हैं और निश्चित रूप से $सॉर्ट करें
आउटपुट में मौजूद एक फ़ील्ड को संदर्भित करता है, जो आपके उदाहरण से _id
में अब "userId" मान होगा एकत्रीकरण से कुंजी, लेकिन यदि वांछित हो तो कुल गिनती के आधार पर "गिनती" भी हो सकती है।
वह भाग त्रुटि उत्पन्न कर रहा था, जैसे $sort
एक वर्तमान फ़ील्ड है और $
. के साथ फ़ील्ड मान नहीं है संकेतन।
लेकिन निश्चित रूप से एक ग्राहक सुलभ संग्रह के रूप में प्रकाशित करने के लिए आपको वास्तविक _id
. को प्रतिस्थापित करने की आवश्यकता है कुछ अपेक्षित के साथ। इसलिए रैंडम आईडी जेनरेशन यहां काम करता है, जैसा कि अन्य क्षेत्रों को शामिल करने से होता है।
थोड़ा और विवरण के लिए, और "हैक्स" पैकेज का एक विकल्प भी है जो सिर्फ एक वेनिला इंस्टॉलेशन के साथ काम करता है, यह उत्तर अपने आप से जिसमें एक उदाहरण के रूप में पूरी सूची है।