I dag faldt jeg over min fejl og regnede med at dele løsningen her, bare hvis nogen støder på et lignende problem.
Påkaldelsen af mapReduce
metoden forårsagede problemet:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Tag et kig på Javadoc for denne metode:
/**
* 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
*/
Den angiver, at kommandoen udføres ved hjælp af REPLACE
som output-tilstand, og at hvis man ønsker en midlertidig samling, outputTarget
skal være null
.
Desværre dog konstruktørenMapReduceCommand
, som bruges i mapReduce
metode, tillader kun outputTarget
at være nullbar, hvis OutputType
er indstillet til INLINE
(ifølge Javadoc af MapReduceCommand.getOutputTarget()
).
Så alt jeg skulle gøre er at ændre den tredje parameter fra null
til en String
, sådan:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Dette var ligesom det eneste parameter, jeg ikke havde leget med, mens jeg prøvede at finde ud af, hvorfor det ikke virkede. Jeg håber, at nogen kan finde dette nyttigt.