Am'm a face dezvoltarea pe MongoDB. Pentru complet non-scopuri rele, uneori îmi doresc să arunce în aer totul într-o bază de date—care este, pentru a șterge fiecare colecție, și orice altceva ar putea fi situată în jurul valorii de, și începe de la zero. Există o singură linie de cod care va lasa-ma sa fac asta? Puncte Bonus pentru a da atât o MongoDB consola metodă și un MongoDB Ruby driver metodă.
Am avut aceeași problemă, atunci când am nevoie pentru a reseta toate colecțiile dar nu't doresc să-și pierde orice bază de date de utilizatori. Folosi următoarea linie de cod, în cazul în care doriți să salvați configurația de utilizator pentru baza de date:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Acest cod va trece prin toate colecție de nume la o bază de date și fixați cei care nu începe cu "system.".
Am urmat db.dropDatabase()
traseu pentru o lungă perioadă de timp, cu toate acestea, dacă te're încercarea de a utiliza acest pentru ștergerea de date între cazuri de testare puteți găsi în cele din urmă probleme cu indicele de constrângeri nu este onorat după baza de date drop. Ca urmare,'ll fie nevoie să te pui cu ensureIndexes, sau o cale simplă ar fi evitarea dropDatabase alltogether și scoaterea din fiecare colecție într-o buclă, cum ar fi:
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
În cazul meu, am fost difuzate acest lucru de la linia de comandă, folosind:
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
Prin elaborarea de răspunsuri la @Robse și @DanH (bravo!), Am'am ajuns la următoarea soluție care satisface complet de mine:
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
Conectarea la baza de date, executa codul.
Se curăță de date prin cădere colecțiile de utilizator și golirea sistemului de colecții.
Auzi niște utilizarea completă a operațiilor de ștergere pentru mongodb folosind shell mongo
Pentru a șterge anumit document în colecțiile: db.mycollection.elimina( {nume:"stiva"} )
Pentru a șterge toate documentele din colecțiile: db.mycollection.elimina()
Pentru a șterge colecția : db.mycollection.picătură()
pentru a șterge baza de date : în primul rând du-te la baza de date prin utilizarea mydb comandă și apoi
db.dropDatabase()
dacă doriți să ștergeți doar o bază de date și sub-colecții folosi asta :
db.dropDatabase();
dacă doriți să ștergeți toate bazele de date mongo apoi utilizați acest :
db.adminCommand("listDatabases").databases.forEach(function(d)
{
if(d.name!="admin" && d.name!="local" && d.name!="config")
{
db.getSiblingDB(d.name).dropDatabase();
}
}
);
Prefer
db.your_collection.remove({})
peste
db.your_collection.drop()
În cazul în care colecția a fost o colectie speciala eu.e o acoperiți de colectie sau o colecție cu un teren marcat la fel de unic, in scadere va șterge colecția în sine și când colecția este din nou l-a creat va fi un obișnuit de colectare. Va trebui să definiți proprietățile din nou. Folosiți-elimina()` pentru a șterge documente, fără a scoate de colectare și afectează comportamentul de colectare.
Sper că vă ajută
Pentru Meteor dezvoltatori.
Deschide o a doua fereastră de terminal în timp ce rulează aplicația în localhost:3000
.
În proiect's folderul rula, meteor mongo
.
coolName = new Mongo.De colectare('yourCollectionName');
Apoi pur și simplu introduceți db.yourCollectionName.picătură();
Te'll vedea în mod automat modificările din server local.
Pentru toată lumea.
db.yourCollectionName.picătură();
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
MongoDB db.dropDatabase() documentația explicarea modificarilor introduse în 2.6:
s-a Schimbat în versiunea 2.6: Această comandă nu se șterge utilizatori asociat cu baza de date curentă.
În MongoDB 3.2 și mai nou, Mongo().getDBNames () " în " mongo
shell va afișa o listă de nume de baze de date pe server:
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
Un forEach()bucla peste matrice putea numi apoi
dropDatabase()` să renunțe la toate cele enumerate de baze de date. Opțional, puteți opta pentru a sări peste unele importante baze de date pe care don't vrea să renunțe. De exemplu:
Mongo().getDBNames().forEach(function(x) {
// Loop through all database names
if (['admin', 'config', 'local'].indexOf(x) < 0) {
// Drop if database is not admin, config, or local
Mongo().getDB(x).dropDatabase();
}
})
Exemplu rula:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
> Mongo().getDBNames().forEach(function(x) {
... if (['admin', 'config', 'local'].indexOf(x) < 0) {
... Mongo().getDB(x).dropDatabase();
... }
... })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
Pentru a șterge toate DBs utilizare:
for i in $(mongo --quiet --host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");
do mongo $i --host $HOSTNAME --eval "db.dropDatabase()";
done