English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Laut MongoDB-Dokumentation ist Map Reduce ein Datenverarbeitungsparadigma, das verwendet wird, um große Datenmengen in nützliche Aggregateresultate zu komprimieren. MongoDB verwendet den Befehl mapReduce für MapReduce-Operationen. MapReduce wird in der Regel zur Verarbeitung großer Datensätze verwendet.
Hier ist die Syntax des grundlegenden mapReduce-Befehls-
>db.collection.mapReduce( function() {emit(key,value);}, //map-Funktion function(key,values) {return reduceFunction}, //reduce-Funktion out: collection, query: document, sort: document, limit: number } )
map-Die reduce-Funktion führt zunächst eine Abfrage auf die Sammlung durch und mappt die Ergebnisse, um Schlüssel zu emittieren-Wertpaare und reduziert sie dann basierend auf Schlüsseln mit mehreren Werten.
In der obigen Syntax-
map
ist eine JavaScript-Funktion, die einen Schlüssel in einen Wert mappt und einen Schlüssel emittiert-Wertpaare
reduce
ist eine JavaScript-Funktion, die alle Dokumente mit gleicher Schlüssel zu reduzieren oder zu gruppieren
out
Bestimmen Sie map-Position der mapReduce-Abfrageergebnisse
query
Bestimmen Sie die optionale Auswahlkriterien für die Dokumente
sort
Bestimmen Sie die optionale Sortierbedingung
limit
Bestimmen Sie die optionale maximale Anzahl der zurückgegebenen Dokumente
Bedenken Sie die folgende Dokumentstruktur für die Speicherung von Benutzerbeiträgen. Das Dokument speichert den user_name und den Veröffentlichungsstatus des Benutzers.
{ "post_text": "w3codebox ist eine großartige Website für Tutorials "user_name": "mark", "status":"aktiv" }
Jetzt werden wirposts
Verwenden Sie die mapReduce-Funktion auf der Sammlung, um alle aktiven Beiträge auszuwählen, sie nach user_name zu gruppieren und die folgenden Codezeilen, um die Anzahl der Beiträge jedes Benutzers zu zählen-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) { return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
Die obige mapReduce-Abfrage gibt folgende Ergebnisse aus-
{ "result": "post_total", "timeMillis": 9, "counts": "input": 4, "emit": 4, "reduce": 2, "output": 2 ,} "ok": 1,}
Die Ergebnisse zeigen, dass es insgesamt4Dokumente, die mit der Abfrage übereinstimmen (status:"aktiv"), die map-Funktion sendet4Ein Dokument mit Schlüssel-Wert-Paaren, das durch die reduce-Funktion in Dokumente mit gleichen Schlüsseln unterteilt wird, die die gleiche Schlüsselzuordnung haben2Stück.}
Um das Ergebnis dieser mapReduce-Abfrage anzuzeigen, verwenden Sie den find-Operator-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) { return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
Die obige Abfrage gibt folgende Ergebnisse zurück, die zeigen, dass der Benutzer tom und mark zwei aktive posts haben –
{"_id" : "tom", "value" : 2 } {"_id" : "mark", "value" : 2 }
Auf ähnliche Weise können MapReduce-Abfragen zur Konstruktion großer und komplexer Aggregation-Abfragen verwendet werden. Die Verwendung von benutzerdefinierten Javascript-Funktionen, die MapReduce nutzen, ist sehr flexibel und leistungsfähig.