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.