今日、私は自分の間違いに出くわし、誰かが同様の問題に遭遇した場合に備えて、ここで解決策を共有しようと考えました。
mapReduceの呼び出し メソッドが問題を引き起こしていました:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
このメソッドのJavadocを見てください:
/**
* performs a map reduce operation
* Runs the command in REPLACE output mode (saves to named collection)
*
* @param map
* map function in javascript code
* @param outputTarget
* optional - leave null if want to use temp collection
* @param reduce
* reduce function in javascript code
* @param query
* to match
* @return
* @throws MongoException
* @dochub mapreduce
*/
コマンドがREPLACEを使用して実行されることを示します 出力モードとして、一時的なコレクションが必要な場合は、outputTarget nullである必要があります 。
残念ながら、コンストラクターMapReduceCommand 、mapReduceで使用されます メソッドは、outputTargetのみを許可します OutputTypeの場合、null許容になります INLINEに設定されています (MapReduceCommand.getOutputTarget()のJavadocによると 。
したがって、私がしなければならなかったのは、3番目のパラメーターをnullから変更することだけです。 いくつかのString 、そのように:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
これは、なぜそれが機能しなかったのかを理解しようとしている間、私が遊んでいなかった唯一のパラメーターのようでした。誰かがこれがお役に立てば幸いです。