MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MapReduce using MongoDB Java Driver non riesce con il tipo errato per l'asserzione BSONElement

Oggi mi sono imbattuto nel mio errore e ho pensato di condividere qui la soluzione, nel caso qualcuno incontrasse un problema simile.

L'invocazione di mapReduce metodo stava causando il problema:

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

Dai un'occhiata al Javadoc per questo metodo:

/**
 * 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
 */

Afferma che il comando viene eseguito utilizzando REPLACE come modalità di output e che se si desidera una raccolta temporanea, il outputTarget dovrebbe essere null .

Sfortunatamente, però, il costruttoreMapReduceCommand , che viene utilizzato in mapReduce metodo, consente solo il outputTarget essere nullable se il OutputType è impostato su INLINE (secondo il Javadoc di MapReduceCommand.getOutputTarget() ).

Quindi tutto quello che dovevo fare era cambiare il terzo parametro da null a qualche String , in questo modo:

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

Questo era come l'unico parametro con cui non avevo giocato mentre cercavo di capire perché non funzionava. Spero che qualcuno possa trovarlo utile.