sql >> Database >  >> NoSQL >> MongoDB

MapReduce met MongoDB Java Driver mislukt met verkeerd type voor BSONElement-bevestiging

Vandaag stuitte ik op mijn fout en dacht ik de oplossing hier te delen, voor het geval iemand een soortgelijk probleem tegenkomt.

De aanroep van de mapReduce methode veroorzaakte het probleem:

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

Bekijk de Javadoc voor deze methode:

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

Er staat dat de opdracht wordt uitgevoerd met REPLACE als uitvoermodus en dat als men een tijdelijke verzameling wil, de outputTarget moet null zijn .

Helaas echter, de constructorMapReduceCommand , die wordt gebruikt in de mapReduce methode, staat alleen de outputTarget . toe nullable zijn als het OutputType is ingesteld op INLINE (volgens de Javadoc van MapReduceCommand.getOutputTarget() ).

Dus ik hoefde alleen maar de derde parameter te veranderen van null naar een String , zoals zo:

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

Dit was de enige parameter waar ik nog niet mee had gespeeld toen ik probeerde uit te zoeken waarom het niet werkte. Ik hoop dat iemand dit nuttig vindt.



  1. Hoe vind je het overeenkomende record in Mongodb?

  2. Kan de gebruiker in MongoDB 3.0.2 niet authenticeren met behulp van een java-verbinding

  3. Reguliere expressie Spring data mongodb repositories

  4. De eenvoudigste manier om Embedded MongoDB te configureren