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.