Also ich bin neu mit mongodb und mapreduce im Allgemeinen und kam in dieser „Marotte“ (oder zumindest in meinem Kopf eine Marotte)MongoDB MapReduce - Emit einen Schlüssel/Wert eines nennt doesnt reduzieren
Say I-Objekte haben in meiner Sammlung wie folgt:
{ 'key': 5, 'Wert': 5}
{ 'key': 5, 'Wert': 4}
{ 'key' : 5, 'Wert': 1}
{ 'key': 4, 'Wert': 6}
{ 'key': 4, 'Wert': 4}
{ 'Schlüssel': 3, 'Wert': 0}
Meine Karte Funktion sendet einfach den Schlüssel und den Wert
Meine reduzieren Funktion fügt einfach die Werte uND vor der Rückkehr sie addiert 1 (ich habe diese, um zu prüfen, ob die Funktion reduzieren ist e ven genannt)
Meine Ergebnisse folgen:
{ '_id': 3, 'Wert': 0}
{ '_id': 4, 'Wert': 11,0}
{ '_id': 5, 'Wert': 11,0}
Wie Sie sehen können, für die Tasten 4 & 5 I die erwartete Antwort von 11 bekommen, aber für th e Taste 3 (mit nur einem Eintrag in der Sammlung mit diesem Schlüssel) Ich bekomme die unerwartete 0!
Ist das natürliche Verhalten von mapreduce im Allgemeinen? Für MongoDB? Für Pymongo (was ich benutze)?
Nur um klar zu sein, dies ist die Art und Weise wie Map Reduce entworfen wurde. Wenn Sie Dokumente mit eindeutigen Schlüsseln (wie Schlüssel 3) modifizieren möchten, sollten Sie die Finalize-Funktion in Betracht ziehen: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-FinalizeFunction – Jenna
Was ist die Lösung, wenn wir einbeziehen möchten Schlüssel mit Einzeldokument in Ergebnissen ??? –
@RaviKhakhkhar die einzelnen Dokumente sind noch in den Ergebnissen enthalten, nur die Reduce-Funktionen werden nie auf sie – Cilvic