Hôm nay tôi đã vấp phải sai lầm của mình và tìm cách chia sẻ giải pháp ở đây, đề phòng trường hợp ai đó gặp phải vấn đề tương tự.
Lời gọi của mapReduce
phương pháp đã gây ra sự cố:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, null, null);
Hãy xem Javadoc cho phương pháp này:
/**
* 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
*/
Nó nói rằng lệnh được thực thi bằng cách sử dụng REPLACE
ở chế độ đầu ra và nếu người ta muốn một tập hợp tạm thời, thì outputTarget
phải là null
.
Tuy nhiên, thật không may, hàm tạo MapReduceCommand
, được sử dụng trong mapReduce
, chỉ cho phép outputTarget
thành nullable nếu OutputType
được đặt thành INLINE
(theo Javadoc của MapReduceCommand.getOutputTarget()
).
Vì vậy, tất cả những gì tôi phải làm là thay đổi tham số thứ ba từ null
tới một số String
, như vậy:
MapReduceOutput sum = collection
.mapReduce(MAP, REDUCE_MAX, "tmp", null);
Đây giống như tham số duy nhất mà tôi đã không thử trong khi cố gắng tìm ra lý do tại sao nó không hoạt động. Tôi hy vọng ai đó có thể thấy điều này hữu ích.