Oggi mi sono imbattuto nel mio errore e ho pensato di condividere qui la soluzione, nel caso qualcuno incontrasse un problema simile.
L'invocazione di mapReduce metodo stava causando il problema:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Dai un'occhiata al Javadoc per questo metodo:
/**
* 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
*/
Afferma che il comando viene eseguito utilizzando REPLACE come modalità di output e che se si desidera una raccolta temporanea, il outputTarget dovrebbe essere null .
Sfortunatamente, però, il costruttoreMapReduceCommand , che viene utilizzato in mapReduce metodo, consente solo il outputTarget essere nullable se il OutputType è impostato su INLINE (secondo il Javadoc di MapReduceCommand.getOutputTarget() ).
Quindi tutto quello che dovevo fare era cambiare il terzo parametro da null a qualche String , in questo modo:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Questo era come l'unico parametro con cui non avevo giocato mentre cercavo di capire perché non funzionava. Spero che qualcuno possa trovarlo utile.