Heute bin ich über meinen Fehler gestolpert und wollte die Lösung hier teilen, falls jemand auf ein ähnliches Problem stößt.
Der Aufruf von mapReduce
Methode hat das Problem verursacht:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Sehen Sie sich das Javadoc für diese Methode an:
/**
* 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
*/
Es besagt, dass der Befehl mit REPLACE
ausgeführt wird als Ausgabemodus und das, wenn man eine temporäre Sammlung will, das outputTarget
sollte null
sein .
Leider ist der Konstruktor MapReduceCommand
, die in mapReduce
verwendet wird -Methode, lässt nur das outputTarget
zu nullfähig sein, wenn der OutputType
auf INLINE
eingestellt ist (laut Javadoc von MapReduceCommand.getOutputTarget()
).
Also musste ich nur den dritten Parameter von null
ändern zu einem String
, etwa so:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Dies war der einzige Parameter, mit dem ich nicht herumgespielt hatte, als ich versuchte herauszufinden, warum es nicht funktionierte. Ich hoffe, jemand könnte dies hilfreich finden.