Днес се натъкнах на грешката си и реших да споделя решението тук, в случай че някой срещне подобен проблем.
Извикването на 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);
Това беше като единственият параметър, с който не бях играл, докато се опитвах да разбера защо не работи. Надявам се, че някой може да намери това за полезно.