Das beste MongoDB Karte verkleinern-Tutorial im Jahr 2024. In diesem Tutorial können Sie MapReduce Befehl,Verwenden Sie MapReduce, lernen
Map-Reduce ist ein Rechenmodell, bedeutet einfach, dass der Großteil der Arbeit (Daten) Zersetzung (MAP) durchzuführen und die Ergebnisse dann in einem abschließenden Ergebnis verschmelzen (REDUCE).
MongoDB bietet eine Map-Reduce sehr flexibel für eine groß angelegte Datenanalyse ist auch ganz praktisch.
Im Folgenden wird die grundlegende Syntax von MapReduce:
>db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values) {return reduceFunction}, //reduce 函数 { out: collection, query: document, sort: document, limit: number } )
Mit MapReduce-Funktionen die beiden Funktionen Karte zu erreichen und Funktionen reduzieren, Map-Funktionsaufruf emittieren (Schlüssel, Wert), durchqueren die Sammlung in allen Datensätzen, und der Schlüsselwert wird auf die Reduzierung der Funktion zur Bearbeitung weitergeleitet.
Map-Funktion muss emittieren (Schlüssel, Wert) Aufruf gibt Paare.
Parameter Beschreibung:
Betrachten Sie das folgende Dokumentstruktur des Benutzers Artikel, Dokumente zu speichern und speichert den Benutzer user_name Artikel Statusfeld:
>db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"active" }) WriteResult({ "nInserted" : 1 })
Jetzt werden wir die Beiträge eingestellt verkleinern Funktion verwenden, um einen veröffentlichten Artikel zu wählen (Status: "aktiv") und durch user_name Paket für jeden Benutzer Beiträge berechnet:
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
Oberhalb verkleinern Ausgabe lautet:
{ "result" : "post_total", "timeMillis" : 23, "counts" : { "input" : 5, "emit" : 5, "reduce" : 1, "output" : 2 }, "ok" : 1 }
Die Ergebnisse zeigten, dass insgesamt vier den Abfragekriterien entsprechen (Status: "aktiv") Dokumente generiert vier Schlüssel in der Map-Funktion in dem Dokument, und dann die gleiche Funktion verwenden, um Schlüssel in zwei Gruppen unterteilt reduzieren.
Spezifische Parameter:
Mit dem Fund Bediener die Abfrageergebnisse verkleinern von anzuzeigen:
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
Die Ergebnisse der obigen Abfrage wird unten gezeigt, gibt es zwei Benutzer tom und markieren Sie zwei Artikel veröffentlicht:
{ "_id" : "mark", "value" : 4 } { "_id" : "w3big", "value" : 1 }
In ähnlicher Weise kann MapReduce verwendet werden große, komplexe Aggregat Abfragen aufzubauen.
Map-Funktion und die Reduzierung von Funktionen implementiert werden können mit Hilfe von JavaScript, MapReduce Einsatz sehr flexibel und leistungsfähig zu machen.