Możesz skutecznie usunąć wszystkie dane i indeksy dla kolekcji z db.collection.drop()
. Upuszczenie kolekcji z dużą liczbą dokumentów i/lub indeksów będzie znacznie bardziej wydajne niż usuwanie wszystkich dokumentów przy użyciu db.collection.remove({})
. Metoda remove()
powoduje dodatkowe porządkowanie indeksów aktualizujących, ponieważ dokumenty są usuwane, a nawet wolniej w środowisku zestawu replik, w którym oplog zawierałby wpisy dla każdego usuniętego dokumentu, a nie pojedyncze polecenie usuwania.
przykład stosując mongo
powłoki:
var dbName = 'nukeme';
db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) {
// Drop all collections except system ones (indexes/profile)
if (!collName.startsWith("system.")) {
// Safety hat
print("WARNING: going to drop ["+dbName+"."+collName+"] in 5s .. hit Ctrl-C if you've changed your mind!");
sleep(5000);
db[collName].drop();
}
})
Warto zauważyć, że wyrzuca kolekcja różnych wyników dotyczących wykorzystywania pamięci, w zależności od konfiguracji silnika składowania:
- WiredTiger (domyślnie kątem przechowywania w MongoDB 3.2 lub nowszy) zwolni miejsce używane przez upuszczoną kolekcję (i wszelkie powiązane indeksy) po zakończeniu upuszczania.
- MMAPv1 (domyślny silnik pamięci w MongoDB 3.0 i starszych) będzie nie zwolnić preallocated disk space. Może to być dobre dla twojego przypadku użycia; wolna przestrzeń jest dostępna do ponownego wykorzystania po włożeniu nowych danych.
Jeśli zamiast upuszczania bazy danych zazwyczaj nie trzeba jawnie tworzyć kolekcji, ponieważ zostaną utworzone po włożeniu dokumentów.
Jednak tutaj jest przykładem usuwania i ponownego tworzenia bazy danych o tej samej nazwie zbiór w mongo
powłoki:
var dbName = 'nukeme';
// Save the old collection names before dropping the DB
var oldNames = db.getSiblingDB(dbName).getCollectionNames();
// Safety hat
print("WARNING: going to drop ["+dbName+"] in 5s .. hit Ctrl-C if you've changed your mind!")
sleep(5000)
db.getSiblingDB(dbName).dropDatabase();
// Recreate database with the same collection names
oldNames.forEach(function(collName) {
db.getSiblingDB(dbName).createCollection(collName);
})
Jak wykonuje się operację usuwania (gdy zajmuje to bardzo dużo czasu)? – Stennie
db.collection.remove ({}); – iefpw
Ah! Polecenie 'remove()' będzie ** znacznie ** wolniejsze niż 'drop()' dla dużej kolekcji, ponieważ wykonuje dodatkowe operacje aktualizowania indeksów, ponieważ dokumenty są usuwane. Jeśli usuwasz wszystkie dokumenty z kolekcji, najlepszym sposobem jest "drop()". Ograniczeniem w upuszczaniu i odtwarzaniu tej samej kolekcji jest to, że trzeba będzie ponownie zapewnić indeksy dodatkowe. – Stennie