MongoDB - मानचित्र कम करें

MongoDB प्रलेखन के अनुसार, Map-reduceएक डेटा प्रोसेसिंग प्रतिमान है जो डेटा के बड़े संस्करणों को उपयोगी समग्र परिणामों में संघनित करने के लिए है। MongoDB का उपयोग करता हैmapReduceमानचित्र-कम संचालन के लिए कमांड। MapReduce का उपयोग आमतौर पर बड़े डेटा सेटों के प्रसंस्करण के लिए किया जाता है।

MapReduce कमांड

निम्नलिखित मूल MapReduce कमांड का सिंटैक्स है -

>db.collection.mapReduce(
   function() {emit(key,value);},  //map function
   function(key,values) {return reduceFunction}, {   //reduce function
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

मैप-कम फ़ंक्शन पहले संग्रह पर सवाल उठाता है, फिर कुंजी-मूल्य जोड़े का उत्सर्जन करने के लिए परिणाम दस्तावेजों को मैप करता है, जो बाद में उन मानों के आधार पर घटाया जाता है जिनमें कई मान होते हैं।

उपरोक्त वाक्य रचना में -

  • map एक जावास्क्रिप्ट फ़ंक्शन है जो एक कुंजी के साथ एक मूल्य को मैप करता है और एक कुंजी-मूल्य जोड़ी का उत्सर्जन करता है

  • reduce एक जावास्क्रिप्ट फ़ंक्शन है जो एक ही कुंजी वाले सभी दस्तावेजों को कम या समूहित करता है

  • out मैप-कम क्वेरी परिणाम के स्थान को निर्दिष्ट करता है

  • query दस्तावेजों के चयन के लिए वैकल्पिक चयन मानदंड निर्दिष्ट करता है

  • sort वैकल्पिक सॉर्ट मापदंड को निर्दिष्ट करता है

  • limit निर्दिष्ट किए जाने वाले दस्तावेज़ों की वैकल्पिक अधिकतम संख्या निर्दिष्ट करता है

MapReduce का उपयोग करना

उपयोगकर्ता के पदों को संग्रहीत करते हुए निम्नलिखित दस्तावेज़ संरचना पर विचार करें। दस्तावेज़ उपयोगकर्ता के user_name और पोस्ट की स्थिति को संग्रहीत करता है।

{
   "post_text": "tutorialspoint is an awesome website for tutorials",
   "user_name": "mark",
   "status":"active"
}

अब, हम अपने पर एक मैपराइड फ़ंक्शन का उपयोग करेंगे posts सभी सक्रिय पोस्टों का चयन करने के लिए संग्रह, उन्हें user_name के आधार पर समूहित करें और फिर निम्नलिखित लिंक का उपयोग करके प्रत्येक उपयोगकर्ता द्वारा पदों की संख्या की गणना करें -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
	
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

उपरोक्त मेप्रेड्यूस क्वेरी निम्नलिखित परिणाम का उत्पादन करती है -

{
   "result" : "post_total",
   "timeMillis" : 9,
   "counts" : {
      "input" : 4,
      "emit" : 4,
      "reduce" : 2,
      "output" : 2
   },
   "ok" : 1,
}

परिणाम से पता चलता है कि कुल 4 दस्तावेज़ क्वेरी (स्थिति: "सक्रिय") से मेल खाते हैं, मानचित्र फ़ंक्शन ने कुंजी-मूल्य वाले जोड़े के साथ 4 दस्तावेज़ उत्सर्जित किए और अंत में कम फ़ंक्शन समूहीकृत मैप किए गए दस्तावेज़ों में 2 में समान कुंजियाँ हैं।

इस MapReduce क्वेरी का परिणाम देखने के लिए, खोज ऑपरेटर का उपयोग करें -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
	
).find()

उपरोक्त क्वेरी निम्न परिणाम देती है जो इंगित करती है कि दोनों उपयोगकर्ता tom तथा mark सक्रिय राज्यों में दो पद हैं -

{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }

इसी तरह से, बड़े जटिल एकत्रीकरण प्रश्नों के निर्माण के लिए MapReduce क्वेरी का उपयोग किया जा सकता है। कस्टम जावास्क्रिप्ट कार्यों का उपयोग MapReduce का उपयोग करता है जो बहुत लचीला और शक्तिशाली है।