Idag snubblade jag över mitt misstag och tänkte dela med mig av lösningen här, ifall någon stöter på ett liknande problem.
Anropandet av mapReduce
metoden som orsakade problemet:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Ta en titt på Javadoc för denna metod:
/**
* 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
*/
Den anger att kommandot exekveras med REPLACE
som utdataläge och att om man vill ha en tillfällig samling, outputTarget
ska vara null
.
Tyvärr dock konstruktornMapReduceCommand
, som används i mapReduce
metod, tillåter endast outputTarget
vara nullbar om OutputType
är inställd på INLINE
(enligt Javadoc för MapReduceCommand.getOutputTarget()
).
Så allt jag behövde göra är att ändra den tredje parametern från null
till någon String
, som så:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Detta var som den enda parametern jag inte hade lekt med när jag försökte ta reda på varför det inte fungerade. Jag hoppas att någon kan ha nytta av detta.