Hoje me deparei com meu erro e resolvi compartilhar a solução aqui, caso alguém encontre um problema semelhante.
A invocação do
mapReduce
método estava causando o problema:MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Dê uma olhada no Javadoc para este método:
/**
* 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
*/
Ele afirma que o comando é executado usando
REPLACE
como modo de saída e que se alguém quiser uma coleção temporária, o outputTarget
deve ser null
. Infelizmente, porém, o construtor
MapReduceCommand
, que é usado no mapReduce
método, permite apenas o outputTarget
para ser anulável se o OutputType
está definido como INLINE
(de acordo com o Javadoc de MapReduceCommand.getOutputTarget()
). Então tudo que eu tive que fazer é mudar o terceiro parâmetro de
null
para algum String
, igual a:MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Este era o único parâmetro com o qual eu não havia brincado enquanto tentava descobrir por que não funcionava. Espero que alguém possa achar isso útil.