Сегодня я наткнулся на свою ошибку и решил поделиться здесь решением, на случай, если кто-нибудь столкнется с подобной проблемой.
Вызов метода mapReduce
вызвал проблему:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Посмотрите на Javadoc для этого метода:
/**
* 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
*/
В нем говорится, что команда выполняется с использованием REPLACE
в качестве режима вывода и что, если требуется временная коллекция, outputTarget
должно быть null
.
К сожалению, однако, конструктор MapReduceCommand
, который используется в методе mapReduce
, позволяет обнулять outputTarget
, только если OutputType
установлен в INLINE
(согласно Javadoc MapReduceCommand.getOutputTarget()
). * * тысяча двадцать-один
Так что все, что мне нужно было сделать, это изменить третий параметр с null
на какой-то String
, вот так:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Это был единственный параметр, с которым я не играл, пытаясь понять, почему он не работает. Я надеюсь, что кто-то может найти это полезным.