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

MongoDB में MapReduce फ़ंक्शन - ID द्वारा दस्तावेज़ को समूहीकृत करना

अपने सीखने में आप mapReduce . एक महत्वपूर्ण टुकड़ा ऐसी जानकारी जिसे आपने या तो याद किया है या पढ़ा और सीखा नहीं है:

और फिर उसके कुछ देर बाद:

तो इसका मूल रूप से मतलब यह है कि क्योंकि "रेड्यूसर" वास्तव में एक ही बार में "सभी" अद्वितीय कुंजियों को संसाधित नहीं करता है, तो यह उसी "इनपुट" की अपेक्षा करता है क्योंकि यह "आउटपुट" देता है, क्योंकि उस आउटपुट को वापस फीड किया जा सकता है रेड्यूसर फिर से।

उसी कारण से "मैपर" को "रेड्यूसर" आउटपुट के रूप में अपेक्षित आउटपुट की आवश्यकता होती है, जो कि रेड्यूसर "इनपुट" भी है। इसलिए आप वास्तव में डेटा संरचना को बिल्कुल भी "बदल" नहीं सकते हैं, बल्कि इसके बजाय बस इसे "कम" कर सकते हैं।

db.Cool.mapReduce(
    function(){emit(this.id, { "cools": [this.cool] })},
    function(key, values){
        var res = [];
        values.forEach(function(cool){
            cool.cools.forEach(function(v) {
                res.push(v);
            });
        });
        return {cools: res};
    },
    {out: "MapReduce"}     
)

अब आप इनपुट को एक ऐरे के रूप में हैंडल कर रहे हैं जो आउटपुट भी है, तो अपेक्षित परिणाम वापस आ जाते हैं।

सीखने वाली अगली बात यह है कि अधिकांश . में मामले mapReduce वास्तव में वह नहीं है जिसका आप उपयोग करना चाहते हैं, और आपको एकत्रीकरण ढांचा इसके बजाय।

mapReduce के विपरीत, यह "मूल रूप से कोडित" ऑपरेटरों का उपयोग करता है और इसे चलाने के लिए जावास्क्रिप्ट व्याख्या की आवश्यकता नहीं होती है। और इसका मोटे तौर पर मतलब है कि यह "तेज़" है और अक्सर निर्माण में बहुत अधिक सरल होता है।

यहां .aggregate() . के साथ एक ही ऑपरेशन है :

db.Cool.aggregate([
    { "$group": {
        "_id": "$id",
        "cools": { "$push": "$cool" }
    }}
])

वही बात, कम कोडिंग और बहुत तेज़।

आपके द्वारा उपयोग किए जाने वाले किसी अन्य संग्रह के लिए आउटपुट $out :

db.Cool.aggregate([
    { "$group": {
        "_id": "$id",
        "cools": { "$push": "$cool" }
    }},
    { "$out": "reduced" }
])

रिकॉर्ड के लिए, यह है mapReduce आउटपुट:

{ "_id" : "a", "value" : { "cools" : [ "a1", "a2" ] } }
{ "_id" : "b", "value" : { "cools" : [ "b1", "b2" ] } }
{ "_id" : "c", "value" : { "cools" : [ "c1" ] } }
{ "_id" : "d", "value" : { "cools" : [ "d1" ] } }

और कुल उत्पादन। मानचित्र से केवल अंतर के साथ _id . को कम करें और value महत्वपूर्ण आउटपुट यह है कि चाबियाँ उलट दी जाती हैं, क्योंकि $group ऑर्डर की गारंटी नहीं देता (लेकिन आमतौर पर इसे रिवर्स स्टैक के रूप में देखा जाता है):

{ "_id" : "d", "cools" : [ "d1" ] }
{ "_id" : "c", "cools" : [ "c1" ] }
{ "_id" : "b", "cools" : [ "b1", "b2" ] }
{ "_id" : "a", "cools" : [ "a1", "a2" ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग-बूट में डिफ़ॉल्ट मोंगो कनेक्शन पूल आकार बदलें

  2. mongodb गैर-सरणी में $pull/$pullAll संशोधक लागू नहीं कर सकता, सरणी तत्व को कैसे हटाएं

  3. Mongodb upsert केवल चयनित फ़ील्ड को अपडेट करें, लेकिन सभी डालें

  4. findAndModify या findOneAndUpdate - एक फ़ंक्शन नहीं है

  5. Mongoose Model.find() और Model.find().exec() में समान परिणाम देते हैं। तो Model.find().exec() का उपयोग करने से परेशान क्यों हैं?