एक सामान्य सेटअप है जिसका उपयोग आप अंतर्निहित ड्राइवर संग्रह ऑब्जेक्ट तक पहुंचने के लिए कर सकते हैं और इसलिए .aggregate()
कोई अन्य प्लग इन इंस्टॉल किए बिना।
मूल प्रक्रिया इस प्रकार है:
FooAges = new Meteor.Collection("fooAges");
Meteor.publish("fooAgeQuery", function(args) {
var sub = this;
var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;
var pipeline = [
{ "$group": {
"_id": "$age",
"name": { "$max": "$name" }
}}
];
db.collection("foo").aggregate(
pipeline,
// Need to wrap the callback so it gets called in a Fiber.
Meteor.bindEnvironment(
function(err, result) {
// Add each of the results to the subscription.
_.each(result, function(e) {
// Generate a random disposable id for aggregated documents
sub.added("fooAges", Random.id(), {
"age": e._id,
"name": e.name
});
});
sub.ready();
},
function(error) {
Meteor._debug( "Error doing aggregation: " + error);
}
)
);
});
तो आप एकत्रीकरण के आउटपुट के लिए एक संग्रह को परिभाषित करते हैं और इस तरह की दिनचर्या के भीतर आप उस सेवा को प्रकाशित करते हैं जिसे आप अपने क्लाइंट में भी सब्सक्राइब करने जा रहे हैं।
इसके अंदर, एकत्रीकरण चलाया जाता है और दूसरे संग्रह में भर जाता है (तार्किक रूप से यह वास्तव में कुछ भी नहीं लिखता है)। तो आप क्लाइंट पर उसी परिभाषा के साथ उस संग्रह का उपयोग करते हैं और सभी समेकित परिणाम अभी वापस आ जाते हैं।
मेरे पास वास्तव में इस प्रश्न के भीतर समान प्रक्रियाओं का एक पूर्ण कामकाजी उदाहरण अनुप्रयोग है। , साथ ही उल्का हैक एग्रीगेट का उपयोग इस प्रश्न पर पैकेज यहां भी, अगर आपको और संदर्भ की आवश्यकता है।