Robię programowanie na MongoDB. Zupełnie nie-złych celów czasami chcę wysadzić wszystko w bazie danych - to znaczy usunąć każdą kolekcję i wszystko, co może leżeć, i zacząć od zera. Czy jest jeden wiersz kodu, który pozwoli mi to zrobić? Punkty bonusowe za podanie zarówno metody konsoli MongoDB, jak i metody sterownika Ruby MongoDB.
454
db.dropAllUsers();
Ponadto z wiersza poleceń:
źródło
Miałem ten sam problem, kiedy musiałem zresetować wszystkie kolekcje, ale nie chciałem stracić żadnych użytkowników bazy danych. Użyj poniższej linii kodu, jeśli chcesz zapisać konfigurację użytkownika dla bazy danych:
Ten kod przejdzie przez wszystkie nazwy kolekcji z jednej bazy danych i usunie te, które nie zaczynają się na „system”.
źródło
remove
zamiastdrop
. Taremove
opcja wydaje się utrzymywać ograniczenia na polach kolekcji, które usuwasz. Kiedy zastosowaliśmy tędrop
metodę,unique
ograniczenie na jednym z naszych pól nie było przestrzegane po upuszczeniu.else
gałąź (doif (c.indexOf("system.") == -1)
), która robiremove
zamiastdrop
. W ten sposób nie masz już pustych kolekcji, jeśli już ich nie używaszdb[c]
, użyj, abydb.getCollection(c)
uniknąć błędów, gdy nazwy kolekcji są cyframi .db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db.getCollection(c).drop(); })
db.dropDatabase()
Długo podążałem tą trasą, ale jeśli próbujesz użyć tego do czyszczenia bazy danych między przypadkami testowymi, możesz w końcu znaleźć problemy z ograniczeniami indeksu, które nie są uwzględniane po upuszczeniu bazy danych. W rezultacie musisz albo zadzierać z zapewnieniem wskaźnikówIndeksy, albo prostszą trasą byłoby całkowite uniknięcie dropDatabase i po prostu usunięcie z każdej kolekcji w pętli, takiej jak:W moim przypadku uruchomiłem to z wiersza polecenia, używając:
źródło
db[collection_name].drop()
i wykazywała te same problemy, które opisałeś za pomocą tejdb.dropDatabase()
metody. Wspaniale przełącza sięs/drop/remove/
!remove()
nie działa dobrze w MongoDB dla Windows, a zamiast tego musiałem zrobić,remove({})
który działa zarówno w OSX, jak i Windows.Kompilując odpowiedzi od @Robse i @DanH (kudos!), Otrzymałem następujące rozwiązanie, które całkowicie mnie satysfakcjonuje:
Połącz się z bazą danych, uruchom kod.
Czyści bazę danych, usuwając kolekcje użytkowników i opróżniając kolekcje systemowe.
źródło
Posłuchaj, niektóre z nich używają operacji pełnego usunięcia dla mongodb przy użyciu powłoki mongo
Aby usunąć określony dokument ze zbiorów:
db.mycollection.remove( {name:"stack"} )
Aby usunąć wszystkie dokumenty ze zbiorów:
db.mycollection.remove()
Aby usunąć kolekcję:
db.mycollection.drop()
aby usunąć bazę danych: najpierw przejdź do tej bazy danych za pomocą
use mydb
polecenia, a następnieźródło
Posługiwać się
źródło
na wypadek gdybyś musiał upuścić wszystko na raz: (upuść wszystkie bazy danych na raz)
źródło
źródło
jeśli chcesz usunąć tylko bazę danych i jej podkolekcje, użyj tego:
use <database name>;
db.dropDatabase();
jeśli chcesz usunąć wszystkie bazy danych w Mongo, użyj tego:
źródło
Najprostszym sposobem na usunięcie bazy danych jest blog:
źródło
Dla programistów Meteor.
Otwórz drugie okno terminala podczas uruchamiania aplikacji
localhost:3000
.W perspektywie folderu Twojego projektu,
meteor mongo
.coolName = new Mongo.Collection('yourCollectionName');
Następnie wystarczy wejść
db.yourCollectionName.drop();
Automatycznie zobaczysz zmiany na lokalnym serwerze.
Dla wszystkich innych.
db.yourCollectionName.drop();
źródło
Mam nadzieję, że to pomaga
źródło
wolę
nad
Jeśli twoja kolekcja była kolekcją specjalną, tj. Kolekcją zamkniętą lub kolekcją z jednym polem oznaczonym jako unikalna, upuszczenie wyczyści samą kolekcję, a kiedy kolekcja zostanie ponownie utworzona, będzie to zwykła kolekcja. Będziesz musiał ponownie zdefiniować właściwości. Użyj więc,
remove()
aby wyczyścić dokumenty bez usuwania kolekcji i wpływając na zachowanie kolekcji.źródło
drop()
jest to prawie natychmiastowe iremove({})
blokuje db na kilka minut lub dziesiątki minut (w zależności od wielkości kolekcji).Aby usunąć wszystkie bazy danych, użyj:
źródło
Dokumentacja MongoDB db.dropDatabase () wyjaśniająca modyfikację wprowadzoną w 2.6:
źródło
W MongoDB 3.2 i nowszych,
Mongo().getDBNames()
wmongo
muszli wyjścia woli listy nazw baz danych na serwerze:forEach()
Pętli na matrycę może następnie wywołaćdropDatabase()
spadek wszystkich wymienionych baz danych. Opcjonalnie możesz pominąć niektóre ważne bazy danych, których nie chcesz upuszczać. Na przykład:Przykładowy przebieg:
źródło