2012-06-26 23 views
12

Nel mio database ci sono molte raccolte mongodb che devo eliminare. Hanno tutti nomi simili e sarebbe facile cancellarli se si potevano usare solo caratteri jolly. Ma non sembra che possano.Come eliminare molte raccolte di mongodb in una volta?

C'è un modo per selezionare un gruppo di raccolte contemporaneamente per eliminarle?

risposta

6

No, non c'è un modo per rilasciare più raccolte da un jolly/regex. Devi lasciarli uno per uno. Recentemente ho eseguito un'attività simile e il mio script è stato in grado di eliminare ~ 20-30 raccolte al secondo. Quanti ne avete?

5

È possibile eliminare tutte le raccolte utilizzando il seguente comando.

> use database_name; 

> db.getCollectionNames().forEach(function(c) { 
    if(c != 'system.indexes') { 
     db.getCollection(c).drop(); 
    } 
    }); 
+1

Questo è ancora uno a uno, e non c'è regex :) –

17

Per regex è possibile utilizzare String.match

db.getCollectionNames().forEach(function(c) { 
    if(!c.match("^system.indexes")) { 
     db.getCollection(c).drop(); 
    } 
    }); 
+2

Controlla la tua espressione regolare. Il tuo esempio lascerà cadere la collezione 'system.indexes'. Suppongo che tu abbia inteso questo per eliminare tutto eccetto 'system.indexes'. – wyattisimo

+0

@wyattisimo hai ragione, la regex corrisponde a 'system.indexes', e sì l'intenzione è di eliminare tutto eccetto' system.indexes'. Grazie! Ho risolto il codice. –

3

Si può cadere ogni collezione nel database con db.dropDatabase() nella shell mongo. Assicurati solo di voler nuotare tutto prima di te.

3
# Delete Particular Collections From MongoDB 

> use database_name 

> delete_collection_list = ["collection1", "collection2", "collection3", "collection4", "collection5", "collection6"] 

> delete_collection_list.forEach(function (collection) { 
    if (db.getCollectionNames().indexOf(collection)>=0) { 
     db[collection].drop(); 
     print("Deleted Collection: "+ collection); 
    } 
    }) 
Problemi correlati