webentwicklung-frage-antwort-db.com.de

Löschen Sie alles in einer MongoDB-Datenbank

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.

404
Trevor Burnham

In der Mongo Shell:

use [database];
db.dropDatabase();

Ruby-Code ist ziemlich ähnlich .

544
Josh K

Auch von der Kommandozeile aus:

mongo DATABASE_NAME --eval "db.dropDatabase();"
106
Rimian

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.

57
Robse

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()});"
32
DanH

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.

14
Bogdan D

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()
9
bhv

Benutzen 

[databaseName]
db.Drop+databaseName();

drop collection 

use databaseName 
db.collectionName.drop();
8

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();
                }
             }
          );
4
user2719890

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.

1
Sreeragh A R
  1. Listet alle verfügbaren dbsshow dbs auf
  2. Wählen Sie die erforderliche Datenbank benutzen 
  3. Löschen Sie die Datenbank db.dropDatabase () // Einige zusätzliche Befehle
  4. Listen Sie alle verfügbaren Sammlungen in einer dbshow-Sammlung auf
  5. Entfernen Sie eine Spezifikationssammlung Db.collection.drop ()

Hoffentlich hilft das

1
priya raj

Für Meteor-Entwickler.

  1. Öffnen Sie ein zweites Terminalfenster, während Sie Ihre App in localhost:3000 Ausführen.

  2. Führen Sie im Ordner Ihres Projekts meteor mongo Aus.

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

  3. Dann einfach db.yourCollectionName.drop(); eingeben

  4. Sie sehen automatisch die Änderungen auf Ihrem lokalen Server.

Für alle anderen.

db.yourCollectionName.drop();

1
Felipe Alarcon

Einfachste Möglichkeit, eine Datenbank zu löschen, sagen Sie ein Blog:

> use blog
switched to db blog
> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }
1
Shalabh Raizada
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 
0
Zaur

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()})'
0
sjas
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.

0

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
0