Dzisiaj natknąłem się na swój błąd i postanowiłem podzielić się rozwiązaniem tutaj, na wypadek, gdyby ktoś napotkał podobny problem.
Wywołanie mapReduce metoda powodowała problem:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Zapoznaj się z dokumentacją Javadoc dotyczącą tej metody:
/**
* 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
*/
Stwierdza, że polecenie jest wykonywane przy użyciu REPLACE jako tryb wyjściowy i jeśli ktoś chce tymczasowej kolekcji, outputTarget powinno być null .
Niestety, konstruktorMapReduceCommand , który jest używany w mapReduce pozwala tylko na outputTarget mieć wartość null, jeśli OutputType jest ustawiona na INLINE (zgodnie z dokumentacją Javadoc MapReduceCommand.getOutputTarget() ).
Wszystko, co musiałem zrobić, to zmienić trzeci parametr z null do jakiegoś String , jak tak:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
To był jedyny parametr, z którym nie bawiłem się, próbując dowiedzieć się, dlaczego to nie działa. Mam nadzieję, że komuś się to przyda.