अपने सीखने में आप 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" ] }