2011-09-23 33 views
8

Soy nuevo en MongoDB, estoy usando map/reduce. ¿Alguien me puede decir cómo depurarlo usando map/reduce? Usé la función "print()" pero en el shell MongoDB, no se imprime nada. Lo que sigue es mi función reduce:mongodb: cómo depurar mapa/reducir en mongodb shell

var reduce = function(key, values){ 
     var result = {count: 0, host: ""}; 

     for(var i in values){ 
     result.count++; 
     result.host = values[i].host; 
     print(key+" : "+values[i]); 
     } 
     return result; 
    } 

cuando escribo la función anterior en el caparazón y presione ENTRAR después de terminar, nada se imprime en la cáscara. ¿Hay algo más que deba hacer para depurar?

Gracias

Respuesta

19

Parece que print() declaraciones en reducir funciones se escriben en el archivo de registro, en lugar de la cáscara. Por lo tanto, verifique su archivo de registro para su resultado de depuración.

Puede especificar el archivo de registro utilizando un parámetro --logpath D:\path\to\log.txt al iniciar el proceso mongod.

+5

El archivo de registro en Linux se encuentra en /var/log/mongodb/mongodb.log –

+0

Mac OS: /usr/local/var/log/mongodb/mongo.log, sigo siendo incapaz para ver algo en el archivo de registro. –

+2

tail -f /usr/local/var/log/mongodb/mongo.log funcionó bien para mí. print ("algún texto de depuración") llamado desde dentro reduce los resultados de la función a este archivo. Asegúrate de que tu mongo esté escribiendo registros en este archivo. Tal vez lo sobrepases. Compruebe su mongo conf (/usr/local/etc/mongod.conf). – ecdeveloper

3

Hay una página dedicada en el sitio web mongodb que es su respuesta: http://www.mongodb.org/display/DOCS/Troubleshooting+MapReduce

y, obviamente, su reducir que está mal: la línea de result.count ++ terminará contiene el número de elementos contenidos en los valores de la matriz que (en el mapa reduce el paradigma) no significa nada. Su función de reducción simplemente devuelve un nombre de host "aleatorio" (porque mapreduce algo no es predecible en el contenido de reducción en cualquier paso) y un número aleatorio.

¿Puede explicar lo que quiere hacer? (supongo que desea contar el número de "algo" por host)

4

Mire este sencillo depurador en línea MongoDB MapReduce que permite obtener resultados de agregación en datos de muestra, así como realizar paso a paso - paso de depuración de las funciones de mapa/reducir/finalizar en el entorno de desarrollo de su navegador.

Espero que sea útil.

http://targetprocess.github.io/mongo-mapreduce-debug-online/

+1

No solo proporcione un enlace. Su respuesta debe ser independiente. –

+0

Lea ["¿Cómo escribo una buena respuesta?"] (Http://stackoverflow.com/help/how-to-answer) –

+0

¡Su depurador es increíble! tks :-) – Fred