今日、私は自分の間違いに出くわし、誰かが同様の問題に遭遇した場合に備えて、ここで解決策を共有しようと考えました。
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);
これは、なぜそれが機能しなかったのかを理解しようとしている間、私が遊んでいなかった唯一のパラメーターのようでした。誰かがこれがお役に立てば幸いです。