2010-11-12 21 views

Respuesta

14

que ejecutar secuencias de comandos en el shell interactivo:

function f() { 
    var names = db.getCollectionNames(); 
    for(var i = 0; i < names.length; i++){ 
    if(names[i].indexOf("mr.") == 0){ 
    db[names[i]].drop();}}}; 
f(); 

Se resuelve mi problema.

+0

copié el mismo código, pero no funcionó para mí :(EDIT: el nombre era diferente. Funciona ahora. Gracias. – theTuxRacer

+1

Buena idea. Sin embargo, es posible que desee abordar la causa del problema a largo plazo. Crear (y dejar) una carga de colecciones temporales para la limpieza manual probablemente no sea lo ideal. –

+1

Debería escribir> if (nombres [i] .indexOf ("tmp.mr.") == 0) {

3

mapa-reducir la tabla temporal debe ser limpiado cuando la conexión que los creó se cierra:

map/reduce es invocada a través de una base de datos de comandos . La base de datos crea una colección temporal para contener la salida de de la operación. La colección es limpiada cuando se cierra la conexión de cliente o cuando se quita explícitamente. Alternativamente, se puede especificar un nombre de colección de salida permanente . map y reducir funciones están escritas en JavaScript y se ejecutan en el servidor.

- MongoDB docs

Si no, usted podría eliminarlos ellos usando el mismo método que haría con cualquier otra colección. Aunque puede ser un poco repetitivo.

3

Otra forma de lograr lo mismo es este fragmento:

db.system.namespaces.find({name: /tmp.mr/}).forEach(function(z) { 
    try{ 
    db.getMongo().getCollection(z.name).drop(); 
    } catch(err) {} 
}); 

Pro: No va a tratar de recoger todos los espacios de nombres en una matriz de JavaScript. MongoDB segfaults en demasiados espacios de nombres.

Cuestiones relacionadas