MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MapReduce mit MongoDB-Java-Treiber schlägt mit falschem Typ für BSONElement-Assertion fehl

Heute bin ich über meinen Fehler gestolpert und wollte die Lösung hier teilen, falls jemand auf ein ähnliches Problem stößt.

Der Aufruf von mapReduce Methode hat das Problem verursacht:

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

Sehen Sie sich das Javadoc für diese Methode an:

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

Es besagt, dass der Befehl mit REPLACE ausgeführt wird als Ausgabemodus und das, wenn man eine temporäre Sammlung will, das outputTarget sollte null sein .

Leider ist der Konstruktor MapReduceCommand , die in mapReduce verwendet wird -Methode, lässt nur das outputTarget zu nullfähig sein, wenn der OutputType auf INLINE eingestellt ist (laut Javadoc von MapReduceCommand.getOutputTarget() ).

Also musste ich nur den dritten Parameter von null ändern zu einem String , etwa so:

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

Dies war der einzige Parameter, mit dem ich nicht herumgespielt hatte, als ich versuchte herauszufinden, warum es nicht funktionierte. Ich hoffe, jemand könnte dies hilfreich finden.