Dnes jsem narazil na svou chybu a napadlo mě, že se zde podělím o řešení, pro případ, že by se někdo setkal s podobným problémem.
Vyvolání mapReduce
problém způsobovala metoda:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Podívejte se na Javadoc pro tuto metodu:
/**
* 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
*/
Uvádí, že příkaz je spuštěn pomocí REPLACE
jako výstupní režim a pokud chcete dočasnou kolekci, outputTarget
by měl být null
.
Bohužel však konstruktorMapReduceCommand
, který se používá v mapReduce
metoda umožňuje pouze outputTarget
mít hodnotu null, pokud OutputType
je nastaveno na INLINE
(podle Javadoc z MapReduceCommand.getOutputTarget()
).
Takže vše, co jsem musel udělat, je změnit třetí parametr z null
na nějaký String
, asi takhle:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
To byl jako jediný parametr, se kterým jsem si nehrál, když jsem se snažil přijít na to, proč to nefunguje. Doufám, že to někomu může pomoci.