sql >> Databasteknik >  >> NoSQL >> MongoDB

MapReduce med MongoDB Java Driver misslyckas med fel typ för BSONElement-påstående

Idag snubblade jag över mitt misstag och tänkte dela med mig av lösningen här, ifall någon stöter på ett liknande problem.

Anropandet av mapReduce metoden som orsakade problemet:

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

Ta en titt på Javadoc för denna metod:

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

Den anger att kommandot exekveras med REPLACE som utdataläge och att om man vill ha en tillfällig samling, outputTarget ska vara null .

Tyvärr dock konstruktornMapReduceCommand , som används i mapReduce metod, tillåter endast outputTarget vara nullbar om OutputType är inställd på INLINE (enligt Javadoc för MapReduceCommand.getOutputTarget() ).

Så allt jag behövde göra är att ändra den tredje parametern från null till någon String , som så:

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

Detta var som den enda parametern jag inte hade lekt med när jag försökte ta reda på varför det inte fungerade. Jag hoppas att någon kan ha nytta av detta.



  1. MongoError:Alternativet 'markör' krävs, förutom för aggregering med förklara-argumentet

  2. Hur man uppdaterar ett visst arrayelement i MongoDB

  3. Hur man skapar skiftlägesokänsliga index i MongoDB

  4. Enheter att använda för maxdistance och MongoDB?