MongoDB Map / Reduce minus der Reduce

Ich habe ungefähr 25.000 Dokumente (4 GB in Raw Json) mit Daten, mit denen ich einige Javascript-Vorgänge ausführen möchte, um sie meinem Endverbraucher zugänglicher zu machen R), und ich möchte diese Änderungen "versionieren", indem ich für jede Änderung eine neue Sammlung hinzufüge, aber ich kann nicht herausfinden, wiemap/reduce ohne dasreduce. Ich möchte eine Eins-zu-Eins-Dokumentenzuordnung - ich beginne mit 25.356 Dokumenten incollection_1, und ich möchte mit 25.356 Dokumenten in @ endcollection_2.

Ich kann es mit diesem hacken:

var reducer = function(key, value_array) {
    return {key: value_array[0]}
}

Und nennen Sie es dann wie folgt:

db.flat_1.mapReduce(mapper, reducer, {keeptemp: true, out: 'flat_2'})

(Mein Mapper ruft emit nur einmal auf, mit einem String als erstem Argument und dem endgültigen Dokument als zweitem. Es ist eine Sammlung dieser zweiten Argumente, die ich wirklich möchte.)

Aber das scheint umständlich und ich weiß nicht, warum es überhaupt funktioniert, da meinemit call-Argumente in meinem Mapper entsprechen nicht dem return-Argument von myreducer. Außerdem erhalte ich ein Dokument wie

{
    "_id": "0xWH4T3V3R", 
    "value": {
        "key": {
            "finally": ["here"],
            "thisIsWhatIWanted": ["Yes!"]
        }
    }
}

was scheint unnötig.

Auch ein Cursor, der seine eigenen Einfügungen ausführt, ist nicht einmal ein Zehntel so schnell wiemapReduce. Ich kenne MongoDB nicht gut genug, um es zu vergleichen, aber ich würde vermuten, es geht um50x Langsamer. Gibt es eine Möglichkeit, einen Cursor parallel zu durchlaufen? Es ist mir egal, ob die Dokumente in meinemcollection_2 sind in einer anderen Reihenfolge als die incollection_1.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage