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

MapReduce ved hjælp af MongoDB Java Driver fejler med forkert type for BSONElement-påstand

I dag faldt jeg over min fejl og regnede med at dele løsningen her, bare hvis nogen støder på et lignende problem.

Påkaldelsen af ​​mapReduce metoden forårsagede problemet:

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

Tag et kig på Javadoc for denne metode:

/**
 * 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 angiver, at kommandoen udføres ved hjælp af REPLACE som output-tilstand, og at hvis man ønsker en midlertidig samling, outputTarget skal være null .

Desværre dog konstruktørenMapReduceCommand , som bruges i mapReduce metode, tillader kun outputTarget at være nullbar, hvis OutputType er indstillet til INLINE (ifølge Javadoc af MapReduceCommand.getOutputTarget() ).

Så alt jeg skulle gøre er at ændre den tredje parameter fra null til en String , sådan:

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

Dette var ligesom det eneste parameter, jeg ikke havde leget med, mens jeg prøvede at finde ud af, hvorfor det ikke virkede. Jeg håber, at nogen kan finde dette nyttigt.



  1. Ordre og begrænsning resulterer i en forespørgsel med et tilbagekald

  2. Sådan implementerer du multitenancy til Redis i springstøvler

  3. ECS Fargate understøtter ikke bind-mounts

  4. Hvordan kan man omgå manglen på transaktioner i MongoDB?