2010-07-29 23 views
363

Robię rozwój na MongoDB. Dla celów całkowicie nie zła, czasami chcę zdmuchnąć wszystko w bazie danych - to jest usunąć każdą kolekcję i wszystko, co może leżeć i zacząć od zera. Czy istnieje jedna linia kodu, która pozwoli mi to zrobić? Punkty premiowe za podanie zarówno metody konsoli MongoDB, jak i metody sterownika MongoDB Ruby.Usuń wszystko w bazie danych MongoDB

Odpowiedz

492

W powłoce Mongo:

use [database]; 
db.dropDatabase(); 

Ruby code is pretty similar.

+34

Note : Nie spowoduje to usunięcia bazy danych, a jedynie całej jej zawartości. – connorbode

+13

@connorbode Dzięki za to. Przeczytałem i natychmiast: ** "B-But OP nie chce usunąć bazy danych!" **. Bardzo myląca komenda !! –

+0

Należy używać z rozwagą: jeśli jesteś w zaciemnionym środowisku za pomocą wiredTiger i nie masz bazy danych użytkowników i wywołujesz dropDatabase, baza danych zostanie usunięta i może ponownie pojawić się jako podstawowa w innym fragmencie po dodaniu nowych rekordów. –

98

Również z wiersza poleceń:

mongo DATABASE_NAME --eval "db.dropDatabase();" 
+1

Nie wierzę, że to działa w 2.4.6. Moje zapisy wciąż istnieją. –

8

użytkowania

[databaseName] 
db.Drop+databaseName(); 

drop collection 

use databaseName 
db.collectionName.drop(); 
9

Słuchajcie kilka w pełni korzystać z operacji Delete MongoDB wykorzystujące Mongo skorupę

Aby usunąć konkretnego dokumentu w kolekcji: db.mycollection.remove({name:"stack"})

Aby usunąć wszystkie dokumenty w kolekcjach: db.mycollection.remove()

Aby usunąć kolekcję: db.mycollection.drop()

usunąć bazy danych: Idź do tej bazy danych za pomocą polecenia use mydb a następnie

db.dropDatabase() 
48

Miałem ten sam problem, kiedy potrzebne, aby wyzerować wszystkie kolekcje ale nie chciał stracić żadnych użytkowników bazy danych. Użyj następującego wiersza kodu, jeśli chcesz, aby zapisać konfigurację użytkownika do bazy danych: „System”

use <whichever database> 
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); }) 

Kod ten będzie przejść przez wszystkich nazw zbiórki z jednej bazy danych i upuść te, które nie zaczynają się od .

+2

Jak wspomniano w @DanH, może się okazać, że bardziej niezawodne jest użycie 'remove' zamiast' drop'. Opcja 'remove' wydaje się utrzymywać ograniczenia na polach kolekcji, które usuwasz. Kiedy zastosowaliśmy metodę 'drop', ograniczenie' unique' na jednym z naszych pól nie zostało uwzględnione po kropli. – Scottymac

+0

@Scottymac - jeszcze lepiej, dodaj gałąź 'else' (do' if (c.indexOf ("system.") == -1) '), która robi' remove' zamiast 'drop'. W ten sposób nie pozostaniesz z pustymi kolekcjami, jeśli ich nie używasz. –

+0

Lepsze niż 'db [c]', użyj 'db.getCollection (c)', co pozwala uniknąć [błędów, gdy nazwy kolekcji są cyframi] (http: //stackoverflow.com/a/24657123/70170). –

4

czy chcesz usunąć tylko baza i jego sub-kolekcje użyj:

  • use <database name>;
  • db.dropDatabase();

jeśli chcesz usunąć wszystkie bazy danych w Mongo następnie użyć tego :

db.adminCommand("listDatabases").databases.forEach(function(d) 
      { 
       if(d.name!="admin" && d.name!="local" && d.name!="config") 
       { 
       db.getSiblingDB(d.name).dropDatabase(); 
       } 
      } 
     ); 
+0

Świetna odpowiedź ... prawdopodobnie to właśnie otrzymywał użytkownik – robert

27

Poszłam za db.dropDatabase() trasa przez długi czas, jednak jeśli próbujesz użyć tego do wycierania bazy danych pomiędzy przypadkami testowymi, może się okazać, że problemy z ograniczeniami indeksu nie są honorowane po spadku bazy danych.W rezultacie konieczne będzie albo zmuszani o z ensureIndexes lub prostsze trasa byłoby unikanie dropDatabase alltogether i po prostu usuwając z każdej kolekcji w pętli, takich jak:

db.getCollectionNames().forEach(
    function(collection_name) { 
    db[collection_name].remove() 
    } 
); 

W moim przypadku biegałam to z linii poleceń przy użyciu:

mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});" 
+0

Dziękuję za tę sugestię, używaliśmy' db [nazwa_kolekcji] .drop() 'i wyświetlał te same problemy opisałeś za pomocą metody 'db.dropDatabase()'. Przełączanie 's/drop/remove /' działało wspaniale! – Scottymac

+4

Zauważyłem, że 'remove()' nie działa dobrze na MongoDB dla Windows, i zamiast tego musiałem zrobić 'remove ({})', który działa zarówno na OSX i Windows. – DanH

+0

Dzięki za cynk, jesteśmy na platformie Linux, ale warto spojrzeć na nieco dalej. – Scottymac

13

kompilując odpowiedzi od @Robse i @DanH (!) Kudos, mam następujące rozwiązanie, które całkowicie spełnia mnie:

db.getCollectionNames().forEach(function(collection_name) { 
    if (collection_name.indexOf("system.") == -1) 
     db[collection_name].drop(); 
    else 
     db.collection_name.remove({}); 
}); 

Połącz się z bazą danych, uruchom kod.

Czyści bazę danych, upuszczając kolekcje użytkowników i opróżniając zbiory systemowe.

+0

Działa to całkiem dobrze. Dokładnie to, czego potrzebowałem. –

1

Najprostszy sposób, aby usunąć bazę powiedzieć blog:

> use blog 
switched to db blog 
> db.dropDatabase(); 
{ "dropped" : "blog", "ok" : 1 } 
1

Dla programistów Meteor.

  1. otworzyć drugie okno terminalu podczas uruchamiania aplikacji w localhost:3000.

  2. W folderze projektu uruchom, meteor mongo.

    coolName = new Mongo.Collection('yourCollectionName');

  3. Następnie wystarczy wpisać db.yourCollectionName.drop();

  4. Będziesz automatycznie zobaczyć zmiany w lokalnym serwerze.

Dla wszystkich pozostałych.

db.yourCollectionName.drop();

0

Aby usunąć wszystkie DB użyć:

for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " "); 

do mongo $i --host $HOSTNAME --eval "db.dropDatabase()"; 

done 
0
use <dbname> 
db.dropAllUsers() 
db.dropAllRoles() 
db.dropDatabase() 

MongoDB db.dropDatabase() documentation wyjaśniając zmiany wprowadzone w 2.6:

Zmieniono w wersji 2.6: To polecenie nie usuwa użytkownicy powiązani z bieżącą bazą danych.

1
  1. Lista wszystkie dostępne DBS pokaż DBS
  2. Wybierz niezbędny db użytku
  3. usunąć bazę danych db.dropDatabase() // Kilka dodatkowych poleceń
  4. Lista wszystkie kolekcje dostępne w db występów kolekcjach
  5. usunąć kolekcję specyfikacja db.collection.drop()

nadzieję, że pomoże

Powiązane problemy