MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

उल्का में औसत एकत्रीकरण प्रश्न

उल्का 0.6.5 के अनुसार, संग्रह एपीआई अभी तक एकत्रीकरण प्रश्नों का समर्थन नहीं करता है क्योंकि उन पर लाइव अपडेट करने का कोई (सीधा) तरीका नहीं है। हालांकि, आप अभी भी उन्हें स्वयं लिख सकते हैं, और उन्हें Meteor.publish . में उपलब्ध करा सकते हैं , हालांकि परिणाम स्थिर होगा। मेरी राय में, इसे इस तरह से करना अभी भी बेहतर है क्योंकि आप कई एकत्रीकरण को मर्ज कर सकते हैं और क्लाइंट-साइड संग्रह API का उपयोग कर सकते हैं।

Meteor.publish("someAggregation", function (args) {
    var sub = this;
    // This works for Meteor 0.6.5
    var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;

    // Your arguments to Mongo's aggregation. Make these however you want.
    var pipeline = [
        { $match: doSomethingWith(args) },
        { $group: {
            _id: whatWeAreGroupingWith(args),
            count: { $sum: 1 }
        }}
    ];

    db.collection("server_collection_name").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("client_collection_name", Random.id(), {
                        key: e._id.somethingOfInterest,                        
                        count: e.count
                    });
                });
                sub.ready();
            },
            function(error) {
                Meteor._debug( "Error doing aggregation: " + error);
            }
        )
    );
});

ऊपर एक उदाहरण समूहीकरण/गणना एकत्रीकरण है। ध्यान देने योग्य कुछ बातें:

  • जब आप ऐसा करते हैं, तो आप स्वाभाविक रूप से server_collection_name पर एक एग्रीगेशन कर रहे होंगे और परिणामों को client_collection_name . नामक एक अलग संग्रह में धकेलना ।
  • यह सदस्यता लाइव नहीं होगी, और संभवत:जब भी तर्क बदलेंगे तो इसे अपडेट कर दिया जाएगा, इसलिए हम वास्तव में एक सरल लूप का उपयोग करते हैं जो सभी परिणामों को बाहर धकेल देता है।
  • एकत्रीकरण के परिणामों में Mongo ObjectIDs नहीं होते हैं, इसलिए हम अपने स्वयं के कुछ मनमाना ऑब्जेक्ट बनाते हैं।
  • एकत्रीकरण के लिए कॉलबैक को फाइबर में लपेटने की जरूरत है। मैं Meteor.bindEnvironment . का उपयोग करता हूं यहां लेकिन कोई भी Future का उपयोग कर सकता है अधिक निम्न-स्तरीय नियंत्रण के लिए।

अगर आप इस तरह के प्रकाशनों के परिणामों को संयोजित करना शुरू करते हैं, तो आपको ध्यान से विचार करना होगा कि बेतरतीब ढंग से उत्पन्न आईडी मर्ज बॉक्स को कैसे प्रभावित करते हैं। हालांकि, इसका सीधा कार्यान्वयन केवल एक मानक डेटाबेस क्वेरी है, सिवाय इसके कि यह Meteor APIs क्लाइंट-साइड के साथ उपयोग करने के लिए अधिक सुविधाजनक है।

TL;DR संस्करण :लगभग जब भी आप सर्वर से डेटा को बाहर धकेल रहे हों, एक publish method . से बेहतर है ।

एकत्रीकरण करने के विभिन्न तरीकों के बारे में अधिक जानकारी के लिए, इस पोस्ट को देखें



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब दस्तावेज़ में सबस्ट्रिंग को कैसे बदलें

  2. MongoDB सरणी तत्वों द्वारा दस्तावेज़ों को सॉर्ट करता है

  3. प्रोएक्टिव मोंगोडीबी मॉनिटरिंग (डेवलपर स्टूडियो/सलाहकार कोण)

  4. MongoDB दस्तावेज़ में अद्वितीय एम्बेडेड/नेस्टेड ऑब्जेक्ट्स की सूची प्राप्त करना

  5. MongoDB ज़ोन मूल बातें का परिचय