MongoDB - Map Reduce: Ein Anfängerleitfaden
Hallo da draußen, zukünftige MongoDB-Meister! Heute machen wir uns auf eine aufregende Reise in die Welt von MongoDBs Map Reduce. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind – ich werde Ihr freundlicher Guide sein und alles Schritt für Schritt erklären. Also, holen Sie sich eine Tasse Kaffee und tauchen wir ein!
Was ist Map Reduce?
Bevor wir uns den MongoDB-spezifischen Details zuwenden, lassen Sie uns verstehen, was Map Reduce ist. Stellen Sie sich vor, Sie versuchen, die Anzahl der roten, blauen und grünen Murmeln in einer großen Tasche zu zählen. Map Reduce ist so, als hätten Sie ein Team von Freunden, die Ihnen helfen:
- Ein Freund (der Mapper) zieht Murmeln heraus und ruft ihre Farben aus.
- Andere Freunde (die Reducer) zählen jeweils eine Farbe.
- Am Ende erhalten Sie eine Gesamtzahl für jede Farbe.
Das ist Map Reduce in der Kürze – es ist eine Möglichkeit, große Mengen an Daten effizient zu verarbeiten und zusammenzufassen.
MapReduce-Befehl in MongoDB
Nun schauen wir uns an, wie wir Map Reduce in MongoDB verwenden können. Die grundlegende Struktur einer Map Reduce-Operation in MongoDB sieht如此 aus:
db.collection.mapReduce(
function() { emit(key, value); }, // Map-Funktion
function(key, values) { return reduceFunction; }, // Reduce-Funktion
{
out: <ausgabe>,
query: <abfrage>,
sort: <sortierung>,
limit: <begrenzung>
}
)
Machen Sie sich keine Sorgen, wenn das initially einschüchternd aussieht – wir werden es Stück für Stück auseinandernehmen!
Die Map-Funktion
Die Map-Funktion ist der Ort, an dem wir entscheiden, welche Daten wir verarbeiten möchten. Es ist so, als würde unser Freund die Farben der Murmeln rufen. Für jedes Dokument verwenden wir die emit()
-Funktion, um einen Schlüssel und einen Wert auszugeben.
Angenommen, wir haben eine Sammlung von Büchern und wir möchten zählen, wie viele Bücher jeder Autor geschrieben hat:
function() {
emit(this.author, 1);
}
Diese Funktion sagt: "Für jedes Buch, rufe den Namen des Autors und die Zahl 1 aus."
Die Reduce-Funktion
Die Reduce-Funktion nimmt alle Werte, die für einen bestimmten Schlüssel ausgegeben wurden, und kombiniert sie. Es ist so, als würden unsere Freunde die Farben zählen.
Für unser Buchbeispiel:
function(key, values) {
return Array.sum(values);
}
Diese Funktion sagt: "Nehmen Sie alle 1s für jeden Autor und addieren Sie sie zusammen."
Optionen
Das Options-Objekt ermöglicht es uns, unsere Map Reduce-Operation anzupassen:
-
out
: Wo die Ergebnisse gespeichert werden sollen -
query
: Filtert die Eingabedokumente -
sort
: Sortiert die Eingabedokumente -
limit
: Begrenzt die Anzahl der zu verarbeitenden Dokumente
Verwendung von MapReduce
Nun setzen wir alles zusammen mit einem realen Beispiel. Stellen wir uns vor, wir haben eine Sammlung von Verkaufsdaten und wir möchten die Gesamtverkäufe für jedes Produkt berechnen.
Zuerst erstellen wir einige Beispiel Daten:
db.sales.insertMany([
{ product: "Widget A", quantity: 5, price: 10 },
{ product: "Gadget B", quantity: 2, price: 20 },
{ product: "Widget A", quantity: 3, price: 10 },
{ product: "Gizmo C", quantity: 1, price: 30 },
{ product: "Gadget B", quantity: 4, price: 20 }
]);
Nun verwenden wir Map Reduce, um die Gesamtverkäufe zu berechnen:
db.sales.mapReduce(
// Map-Funktion
function() {
emit(this.product, this.quantity * this.price);
},
// Reduce-Funktion
function(key, values) {
return Array.sum(values);
},
// Optionen
{
out: "product_sales"
}
)
Lassen Sie uns das auseinandernehmen:
- Die Map-Funktion berechnet den Verkaufspreis für jedes Dokument und gibt den Produktnamen als Schlüssel aus.
- Die Reduce-Funktion summiert alle Verkaufspreise für jedes Produkt.
- Wir speichern die Ergebnisse in einer neuen Sammlung namens "product_sales".
Um die Ergebnisse zu sehen:
db.product_sales.find()
Sie könnten etwas wie dies sehen:
{ "_id" : "Widget A", "value" : 80 }
{ "_id" : "Gadget B", "value" : 120 }
{ "_id" : "Gizmo C", "value" : 30 }
Voilà! Wir haben erfolgreich Map Reduce verwendet, um die Gesamtverkäufe für jedes Produkt zu berechnen.
Wann sollte man Map Reduce verwenden?
Map Reduce ist mächtig, aber es ist nicht immer das beste Werkzeug für den Job. Hier sind einige Szenarien, in denen Map Reduce glänzt:
- Komplexe Aggregationen, die nicht mit der Aggregationspipeline durchgeführt werden können
- Wenn Sie große Mengen an Daten verarbeiten müssen, die nicht in den Speicher passen
- Wenn Sie Operationen ausführen müssen, die nicht in MongoDBs Query-Sprache verfügbar sind
Für einfachere Aufgaben ist die Aggregationspipeline von MongoDB jedoch oft schneller und einfacher zu verwenden.
Schlussfolgerung
Glückwunsch! Sie haben Ihre ersten Schritte in die Welt von MongoDBs Map Reduce gemacht. Wir haben die Grundlagen behandelt, aber es gibt noch so viel mehr zu erkunden. Erinnern Sie sich daran, dass das Erlernen von Map Reduce wie das Fahrradfahren ist – es erfordert Übung. Haben Sie keine Angst, zu experimentieren und Fehler zu machen – das ist, wie wir lernen!
Zum Abschluss hier eine Tabelle, die die wichtigsten Bestandteile einer Map Reduce-Operation zusammenfasst:
Bestandteil | Beschreibung | Beispiel |
---|---|---|
Map-Funktion | Verarbeitet jedes Dokument und gibt Schlüssel-Wert-Paare aus | function() { emit(this.author, 1); } |
Reduce-Funktion | Kombiniert die Werte für jeden Schlüssel | function(key, values) { return Array.sum(values); } |
Ausgabe | Gibt an, wo die Ergebnisse gespeichert werden sollen | { out: "product_sales" } |
Abfrage | Filtert die Eingabedokumente | { query: { price: { $gt: 10 } } } |
Sortierung | Sortiert die Eingabedokumente | { sort: { price: 1 } } |
Begrenzung | Begrenzt die Anzahl der zu verarbeitenden Dokumente | { limit: 1000 } |
Üben Sie weiter, bleiben Sie neugierig, und bald werden Sie ein.Map Reduce-Zauberer sein! Viel Spaß beim Programmieren!
Credits: Image by storyset