2012-04-04 5 views
3

私はスコープ変数として更新するコレクションを渡そうとしましたが、ダイスはありませんでした。 私はファイナライズ本体からdb.getCollectionを起動しないようにしようとした - 何のサイコロを、私はこれを取得:map reduceエンジンのfinalizeメソッドからmongoコレクションを更新することは可能ですか?

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

私はそれがdbがfinalizeメソッド内定義されていないことを意味を推測します。それで、それは可能ですか?私はいくつかのコレクションに挿入してcollector.push(value)を交換したいと思います

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; 
} 

EDIT

は、ここに私のfinalizeメソッドです。

+0

あなたのコードは何ですか? –

答えて

2

Map/Reduce/Finalize機能から別のコレクションを変更することはできません。

これは、同様の質問のあるユーザーからの質問へのリンクです。残念ながら答えは「いいえ」です。
How to change the structure of MongoDB's map-reduce results?

これは、MapReduceがシャード環境で動作するように設計されている理由の1つです。計算は異なる断片に分散され、結果は集計されます。各シャード上で実行されている各関数がコレクションを変更できるようにすると、各シャードは異なるデータで終わる可能性があります。

Map Reduce操作の結果、別のコレクションを変更したい場合は、Map Reduce操作を実行して結果を取得し、アプリケーションで別のコレクションを更新することをお勧めします。

複数のMap Reduce操作の結果をマージする場合は、インクリメンタルMap Reduceでこれを行うことができます。これに関するドキュメントは、ここにあります:http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce

関連する問題