Ich entwickle MongoDB. Zu völlig unheilvollen Zwecken möchte ich manchmal alles in einer Datenbank wegblasen - das heißt, jede einzelne Sammlung und alles, was sonst noch da ist, löschen und von vorne anfangen. Gibt es eine einzige Codezeile, mit der ich das tun kann? Bonuspunkte für die Angabe einer MongoDB-Konsolenmethode und einer MongoDB-Ruby-Treibermethode.
Auch von der Kommandozeile aus:
mongo DATABASE_NAME --eval "db.dropDatabase();"
Ich hatte das gleiche Problem, als ich alle Sammlungen zurücksetzen musste, aber keine Datenbankbenutzer verlieren wollte. Verwenden Sie die folgende Codezeile, wenn Sie die Benutzerkonfiguration für die Datenbank speichern möchten:
use <whichever database>
db.getCollectionNames().forEach(function(c) { if (c.indexOf("system.") == -1) db[c].drop(); })
Dieser Code durchläuft alle Sammlungsnamen aus einer Datenbank und löscht diejenigen, die nicht mit "System" beginnen.
Ich folgte lange der db.dropDatabase()
-Route. Wenn Sie jedoch versuchen, die Datenbank zwischen den Testfällen zu löschen, können Sie Probleme mit Indexeinschränkungen feststellen, die nach dem Datenbankabbruch nicht berücksichtigt werden. Als Ergebnis müssen Sie sich entweder mit sureIndexes herumschlagen, oder eine einfachere Route würde die dropDatabase zusammen vermeiden und einfach aus jeder Sammlung in einer Schleife entfernen, z.
db.getCollectionNames().forEach(
function(collection_name) {
db[collection_name].remove()
}
);
In meinem Fall habe ich dies von der Kommandozeile aus ausgeführt:
mongo [database] --eval "db.getCollectionNames().forEach(function(n){db[n].remove()});"
Durch das Zusammenstellen der Antworten von @Robse und @DanH (kudos!) Habe ich folgende Lösung, die mich völlig zufriedenstellt:
db.getCollectionNames().forEach( function(collection_name) {
if (collection_name.indexOf("system.") == -1)
db[collection_name].drop();
else
db.collection_name.remove({});
});
Stellen Sie eine Verbindung zu Ihrer Datenbank her und führen Sie den Code aus.
Bereinigt die Datenbank, indem die Benutzersammlungen gelöscht und die Systemsammlungen geleert werden.
Es gibt einige vollständige Löschoperationen für Mongodb, die Mongo Shell verwenden
So löschen Sie ein bestimmtes Dokument in Sammlungen: db.mycollection.remove( {name:"stack"} )
So löschen Sie alle Dokumente in Sammlungen: db.mycollection.remove()
So löschen Sie die Sammlung: db.mycollection.drop()
um die Datenbank zu löschen, gehen Sie zuerst mit dem Befehl use mydb
in diese Datenbank und dann
db.dropDatabase()
Benutzen
[databaseName]
db.Drop+databaseName();
drop collection
use databaseName
db.collectionName.drop();
wenn Sie nur eine Datenbank und ihre Untersammlungen löschen möchten, gehen Sie wie folgt vor:
use <database name>;
db.dropDatabase();
wenn du alle datenbanken in mongo löschen willst, dann benutze dies:
db.adminCommand("listDatabases").databases.forEach(function(d)
{
if(d.name!="admin" && d.name!="local" && d.name!="config")
{
db.getSiblingDB(d.name).dropDatabase();
}
}
);
Ich bevorzuge
db.your_collection.remove({})
Über
db.your_collection.drop()
Wenn es sich bei Ihrer Sammlung um eine spezielle Sammlung handelte .__ eine Sammlung mit capped oder eine Sammlung, bei der ein Feld als eindeutig gekennzeichnet ist, wird das Löschen der Sammlung selbst gelöscht, und wenn die Sammlung erneut erstellt wird, handelt es sich um eine gewöhnliche Sammlung. Sie müssen die Eigenschaften erneut definieren. Verwenden Sie remove()
, um die Dokumente zu löschen, ohne die Sammlung zu entfernen und das Verhalten der Sammlung zu beeinflussen.
Hoffentlich hilft das
Für Meteor-Entwickler.
Öffnen Sie ein zweites Terminalfenster, während Sie Ihre App in localhost:3000
Ausführen.
Führen Sie im Ordner Ihres Projekts meteor mongo
Aus.
coolName = new Mongo.Collection('yourCollectionName');
Dann einfach db.yourCollectionName.drop();
eingeben
Sie sehen automatisch die Änderungen auf Ihrem lokalen Server.
Für alle anderen.
db.yourCollectionName.drop();
Einfachste Möglichkeit, eine Datenbank zu löschen, sagen Sie ein Blog:
> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
db.getCollectionNames().forEach(c=>db[c].drop())
Um alle DBs zu löschen, verwenden Sie:
for i in $(mongo --quiet --Host $HOSTNAME --eval "db.getMongo().getDBNames()" | tr "," " ");
do mongo $i --Host $HOSTNAME --eval "db.dropDatabase()";
done
falls Sie alles auf einmal löschen müssen: (alle Datenbanken auf einmal löschen)
mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
use <dbname>
db.dropAllUsers()
db.dropAllRoles()
db.dropDatabase()
MongoDB db.dropDatabase () Dokumentation Erklärung der in 2.6 eingeführten Änderung:
In Version 2.6 geändert: Dieser Befehl löscht nicht die Benutzer, die der aktuellen Datenbank zugeordnet sind.
In MongoDB 3.2 und neuer gibt Mongo().getDBNames()
in der mongo
-Shell eine Liste der Datenbanknamen auf dem Server aus:
> Mongo().getDBNames()
[ "local", "test", "test2", "test3" ]
> show dbs
local 0.000GB
test 0.000GB
test2 0.000GB
test3 0.000GB
Eine forEach()
-Schleife über dem Array könnte dann dropDatabase()
aufrufen, um alle aufgelisteten Datenbanken zu löschen. Optional können Sie einige wichtige Datenbanken überspringen, die Sie nicht löschen möchten. Zum Beispiel:
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();
}
})
Beispiellauf:
> 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