sql >> Databáze >  >> NoSQL >> MongoDB

MapReduce pomocí ovladače MongoDB Java Driver selže s nesprávným typem výrazu BSONElement

Dnes jsem narazil na svou chybu a napadlo mě, že se zde podělím o řešení, pro případ, že by se někdo setkal s podobným problémem.

Vyvolání mapReduce problém způsobovala metoda:

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

Podívejte se na Javadoc pro tuto metodu:

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

Uvádí, že příkaz je spuštěn pomocí REPLACE jako výstupní režim a pokud chcete dočasnou kolekci, outputTarget by měl být null .

Bohužel však konstruktorMapReduceCommand , který se používá v mapReduce metoda umožňuje pouze outputTarget mít hodnotu null, pokud OutputType je nastaveno na INLINE (podle Javadoc z MapReduceCommand.getOutputTarget() ).

Takže vše, co jsem musel udělat, je změnit třetí parametr z null na nějaký String , asi takhle:

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

To byl jako jediný parametr, se kterým jsem si nehrál, když jsem se snažil přijít na to, proč to nefunguje. Doufám, že to někomu může pomoci.



  1. Agregační dotaz MongoDB pomocí ovladače PHP

  2. Když mongodb server nefunguje, jak zachytit chybu při spuštění dotazu mongoose

  3. Jak vložit obrázky do mongoDB pomocí javy?

  4. Mongoose vytvoří připojení pro podporu více nájemců v node.js