English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أمر MongoDB mapReduce

حسب وثائق MongoDB، Map reduce هو نموذج معالجة بيانات يستخدم لضغط البيانات الكبيرة إلى نتائج تجميع مفيدة. يستخدم MongoDB أوامر mapReduce لتنفيذ عمليات map reduce. يتم استخدام MapReduce عادةً لمعالجة مجموعات البيانات الكبيرة.

أمر MapReduce

هنا هو بناء أمر mapReduce الأساسي-

>db.collection.mapReduce(   
function() { emit(key, value); }, // دالة خريطة   
function(key, values) { return reduceFunction }, { // دالة تقليل
      خارج: مجموعة
      استعلام: مستند
      ترتيب: مستند
      حدود: عدد
   }
)

يبدأ map-reduce بناءً على استعلام المجموعة، ثم يُسطر النتائج المُسطرة ليعطي زوجات مفتاح-قيمة، ثم يتم تقليلها بناءً على المفتاح الذي يحتوي على عدة قيم.

في الجملة السابقة-

  • خريطة هي دالة JavaScript تُسوق قيمة إلى مفتاح وتُصدِر زوج مفتاح-قيمة

  • تقليل هي دالة JavaScript تستخدم لتقليل أو تنظيم جميع المستندات التي تحتوي على نفس المفتاح

  • خارج تحديد موقع نتائج استعلام map-reduce

  • استعلام تحديد المعيار الاختياري لاختيار المستندات

  • ترتيب تحديد شرط الترتيب الاختياري

  • حدود تحديد عدد المستندات القصوى التي سيتم عودتها

استخدام MapReduce

اعتبار بنية المستندات التي تُخزن فيها مقالات المستخدم. يتم تخزين user_name ووضع النشر في هذا المستند.

{
   "post_text": "w3codebox هو موقع رائع لتعليمات التدريب",
   "user_name": "mark",
   "status": "active"
}

الآن، سنقوم فيمقالاتيُستخدم mapReduce على المجموعة لاختيار جميع المقالات النشطة، ثم يُقسم إلى مجموعات بناءً على user_name، ثم يتم حساب عدد المقالات لكل مستخدم باستخدام الكود التالي-

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

استدعاء mapReduce أعطى النتائج التالية-

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

النتائج تظهر أن هناك 4 مستندات تتطابق مع الاستعلام (status: "active")،�数ونات map أرسلت 4 مستندات تحتوي على قيم مفتاح، وأخيرًا قام reduce بنقسيم المستندات المُسطرة ذات المفتاح نفسه إلى 2.

للتحقق من نتائج استعلام mapReduce هذا، استخدم عمليات العثور find-

>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 لديهما postين نشطين –

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

بشكل مماثل، يمكن استخدام استعلامات MapReduce لإنشاء استعلامات تحصيل معقدة كبيرة. استخدام وظائف JavaScript المخصصة باستخدام MapReduce يوفر مرونة كبيرة وقدرة عالية.