2012-06-26 9 views
12

Istnieje wiele kolekcji mongodb w mojej bazie danych, które muszę usunąć. Wszystkie mają podobne nazwy i łatwo byłoby je usunąć, gdyby można było użyć tylko symboli wieloznacznych. Ale nie wygląda na to, że mogą.Jak usunąć wiele mononimów na raz?

Czy istnieje sposób, aby wybrać kilka kolekcji na raz, aby je usunąć?

Odpowiedz

6

Nie, nie ma sposobu na upuszczenie kilku kolekcji za pomocą symbolu wieloznacznego/wyrażenia regularnego. Musisz je upuścić jeden po drugim. Niedawno wykonałem podobne zadanie i mój skrypt był w stanie zrzucić ~ 20-30 kolekcji na sekundę. Ile masz?

5

Możesz usunąć wszystkie kolekcje za pomocą poniższego polecenia.

> use database_name; 

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

To wciąż jeden po drugim i nie ma regex :) –

17

Dla regex można użyć String.match

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

Sprawdź swoje wyrażenie regularne. Twój przykład spowoduje usunięcie kolekcji 'system.indexes'. Zakładam, że zamierzałeś to upuścić wszystko z wyjątkiem 'system.indexes'. – wyattisimo

+0

@wyattisimo masz rację, regex pasuje do 'system.indexes', i tak, intencją jest upuszczenie wszystkiego poza' system.indexes'. Dzięki! Naprawiłem kod. –

3

można upuścić każdy kolekcję w bazie danych z db.dropDatabase() w powłoce Mongo. Tylko upewnij się, że naprawdę chcesz odrzucić wszystko, zanim to zrobisz.

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); 
    } 
    }) 
Powiązane problemy