Днес се натъкнах на грешката си и реших да споделя решението тук, в случай че някой срещне подобен проблем.
Извикването на 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 да бъде nullable, ако OutputType е зададено на INLINE (според Javadoc на MapReduceCommand.getOutputTarget() ).
Така че всичко, което трябваше да направя, е да променя третия параметър от null към някакъв String , така:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Това беше като единственият параметър, с който не бях играл, докато се опитвах да разбера защо не работи. Надявам се, че някой може да намери това за полезно.