Aujourd'hui, je suis tombé sur mon erreur et j'ai pensé partager la solution ici, juste au cas où quelqu'un rencontrerait un problème similaire.
L'invocation de mapReduce
méthode était à l'origine du problème :
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Jetez un oeil à la Javadoc pour cette méthode :
/**
* 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
*/
Il indique que la commande est exécutée en utilisant REPLACE
comme mode de sortie et que si l'on veut une collection temporaire, le outputTarget
doit être null
.
Malheureusement, le constructeur MapReduceCommand
, qui est utilisé dans le mapReduce
méthode, n'autorise que le outputTarget
être nullable si le OutputType
est défini sur INLINE
(selon le Javadoc de MapReduceCommand.getOutputTarget()
).
Donc tout ce que j'avais à faire est de changer le troisième paramètre de null
à une String
, comme ceci :
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
C'était comme le seul paramètre avec lequel je n'avais pas joué en essayant de comprendre pourquoi cela ne fonctionnait pas. J'espère que quelqu'un trouvera cela utile.