MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MapReduce, използващ MongoDB Java драйвер, се проваля с грешен тип за твърдение за BSONElement

Днес се натъкнах на грешката си и реших да споделя решението тук, в случай че някой срещне подобен проблем.

Извикването на 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 да бъде nullable, ако OutputType е зададено на INLINE (според Javadoc на MapReduceCommand.getOutputTarget() ).

Така че всичко, което трябваше да направя, е да променя третия параметър от null към някакъв String , така:

MapReduceOutput sum = collection
                .mapReduce(MAP, REDUCE_MAX, "tmp", null);

Това беше като единственият параметър, с който не бях играл, докато се опитвах да разбера защо не работи. Надявам се, че някой може да намери това за полезно.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Намерете документ с масив, който съдържа конкретна стойност

  2. Как мога да използвам not like на laravel mongodb?

  3. Mongoose Model.find не е функция?

  4. как да задам ключ по var в mongoose,Node.js?

  5. Извличане на стойност на поле от масив на поддокумент