English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
حسب وثائق MongoDB، Map reduce هو نموذج معالجة بيانات يستخدم لضغط البيانات الكبيرة إلى نتائج تجميع مفيدة. يستخدم MongoDB أوامر mapReduce لتنفيذ عمليات map reduce. يتم استخدام MapReduce عادةً لمعالجة مجموعات البيانات الكبيرة.
هنا هو بناء أمر mapReduce الأساسي-
>db.collection.mapReduce( function() { emit(key, value); }, // دالة خريطة function(key, values) { return reduceFunction }, { // دالة تقليل خارج: مجموعة استعلام: مستند ترتيب: مستند حدود: عدد } )
يبدأ map-reduce بناءً على استعلام المجموعة، ثم يُسطر النتائج المُسطرة ليعطي زوجات مفتاح-قيمة، ثم يتم تقليلها بناءً على المفتاح الذي يحتوي على عدة قيم.
في الجملة السابقة-
خريطة
هي دالة JavaScript تُسوق قيمة إلى مفتاح وتُصدِر زوج مفتاح-قيمة
تقليل
هي دالة JavaScript تستخدم لتقليل أو تنظيم جميع المستندات التي تحتوي على نفس المفتاح
خارج
تحديد موقع نتائج استعلام map-reduce
استعلام
تحديد المعيار الاختياري لاختيار المستندات
ترتيب
تحديد شرط الترتيب الاختياري
حدود
تحديد عدد المستندات القصوى التي سيتم عودتها
اعتبار بنية المستندات التي تُخزن فيها مقالات المستخدم. يتم تخزين 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 يوفر مرونة كبيرة وقدرة عالية.