MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MapReduce sử dụng MongoDB Trình điều khiển Java không thành công với loại sai cho xác nhận BSONElement

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.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. PHP MongoDB - Không dùng lệnh tổng hợp mà không có tùy chọn con trỏ. Gì?

  2. Cách xuất JSON từ MongoDB bằng Robomongo

  3. In ấn đầu ra đẹp mắt trong pymongo

  4. MongoDB:đâu là giới hạn giữa ít và nhiều?

  5. Spring Boot thiết lập kho lưu trữ MongoDB