2012-04-04 8 views
3

Ich habe versucht, die Sammlung zu aktualisieren, als eine Variable des Umfangs - keine Würfel. Ich versuchte db.getCollection vom Finalisierung Körper aufrufen - keine Würfel, bekomme ich diese:ist es möglich, eine Mongo-Sammlung von der Finalize-Methode der Map-Reduce-Engine zu aktualisieren?

db assertion failure, assertion: 'invoke failed: JS Error: TypeError: db has no properties nofile_b:18', assertionCode: 9004 

Ich denke, es bedeutet, dass db innerhalb einer Finalisierung Methode nicht definiert ist. Also, ist es möglich?

EDIT

Hier ist meine Methode finalize:

function(key, value) { 
    function flatten(value, collector) { 
    var items = value; 
    if (!(value instanceof Array)) { 
     if (!value.items) { 
     collector.push(value); 
     return; 
     } 

     items = value.items; 
    } 
    for (var i = 0; i < items.length && collector.length < max_group_size; ++i) { 
     flatten(items[i], collector); 
    } 
    } 

    var collector = []; 
    flatten(value, collector); 
    return collector; 
} 

Ich mag würde collector.push(value) mit Einsatz in eine Sammlung ersetzen.

+0

Wie lautet Ihr Code? –

Antwort

2

Es ist nicht möglich, eine andere Sammlung innerhalb einer Map/Reduce/Finalize-Funktion zu ändern.

Hier ist ein Link zu einer Frage von einem Benutzer mit einer ähnlichen Frage. Die Antwort ist leider "Nein".
How to change the structure of MongoDB's map-reduce results?

Ein Grund dafür ist, dass MapReduce entwickelt wurde, um in einer geschärften Umgebung zu arbeiten. Die Berechnungen werden auf die verschiedenen Shards verteilt, und die Ergebnisse werden dann aggregiert. Wenn jede Funktion, die auf jedem Shard ausgeführt wird, Sammlungen ändern darf, kann jeder Shard verschiedene Daten enthalten.

Wenn Sie möchten, dass eine separate Sammlung als Ergebnis einer Map Reduce-Operation geändert wird, ist die beste Strategie, die Map Reduce-Operation auszuführen, die Ergebnisse zu erhalten und die separate Sammlung von Ihrer Anwendung aktualisieren zu lassen.

Wenn die Ergebnisse mehrerer Map Reduce-Vorgänge zusammengeführt werden sollen, ist dies über eine inkrementelle Map Reduce möglich. Die Dokumentation hierzu finden Sie hier: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce

Verwandte Themen