MongoDB删除每个数据库

Joh*_*ohn 88 mongodb

我想知道是否有命令从MongoDB中删除每个数据库?

我知道如果我只想删除一个数据表,我只需要输入数据库的名称,如下面的代码,但我不想指定它.

mongo DB_NAME --eval 'db.dropDatabase();'
Run Code Online (Sandbox Code Playgroud)

ALo*_*LoR 135

你可以创建一个javascript循环来完成这项工作,然后在mongoconsole中执行它.

var dbs = db.getMongo().getDBNames()
for(var i in dbs){
    db = db.getMongo().getDB( dbs[i] );
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}
Run Code Online (Sandbox Code Playgroud)

将它保存到dropall.js然后执行:

mongo dropall.js
Run Code Online (Sandbox Code Playgroud)

  • `var mongo = db.getMongo(); mongo.getDBNames().forEach(function (dbname) { var db = mongo.getDB(dbname); db.dropDatabase(); });` (12认同)
  • 我想当有人想放弃他们的数据库时,他们不想放弃像管理员和本地这样的mongo内部数据库. (6认同)
  • 您也可以复制粘贴上面的代码并在 mongo 控制台上输入。 (3认同)
  • 这使我的系统数据库(Mongo版本2.4.3)下降了.我不得不重新启动mongodb进程以使其再次工作. (2认同)

kev*_*kev 95

试试这个命令:

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
Run Code Online (Sandbox Code Playgroud)

  • 真好 这对Docker非常适合:D`docker exec mongodb sh -c“ mongo --quiet --eval'db.getMongo()。getDBNames()。forEach(function(i){db.getSiblingDB(i).dropDatabase() })'“` (2认同)

And*_*eas 17

您也可以使用简单的mongo命令执行此操作:

db.adminCommand("listDatabases").databases.forEach( function (d) {
    if (d.name != "local" && d.name != "admin"  && d.name != "apiomat"  && d.name != "config")
        db.getSiblingDB(d.name).dropDatabase();
 })
Run Code Online (Sandbox Code Playgroud)


bti*_*nay 5

添加到@ALoR的答案中,为方便起见,您可以将以下内容放在〜/ .mongorc.js中

function dropDatabases(){
    var mongo = db.getMongo();

    var dbNames = mongo.getDBNames();
    for (var i = 0; i < dbNames.length; i++) {
        var db = mongo.getDB( dbNames[i] );

        print( "Dropping database " + db.getName() + "..." );
        db.dropDatabase();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在mongo shell中,您只需

dropDatabases()
Run Code Online (Sandbox Code Playgroud)

从文档:

Mongo将从调用mongo的用户的主目录中读取.mongorc.js文件。在文件中,用户可以定义变量,自定义mongo shell提示符或更新每次启动Shell时希望更新的信息。


Gas*_*Gas 5

将此保存到drop_all_dbs.js:

var databases = db.getMongo().getDBNames()
for(var i in databases){
    db = db.getMongo().getDB( databases[i] );
    if(db.getName() == "admin" || db.getName() == "local"){
        print("skipping db " + db.getName())
        continue
    }
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}
Run Code Online (Sandbox Code Playgroud)

现在您可以执行:

mongo drop_all_dbs.js
Run Code Online (Sandbox Code Playgroud)

并且所有数据库(admin和local除外)都将被删除。

此答案是ALoR的副本,仅修复了系统数据库的丢失


小智 5

db
  .getMongo()
  .getDBNames()
  .filter(n => !['admin','local','config'].includes(n))
  .forEach(dname =>
    db
      .getMongo()
      .getDB(dname)
      .dropDatabase()
  )
;
Run Code Online (Sandbox Code Playgroud)
db.getMongo().getDBNames().filter(n => !['admin','local','config'].includes(n)).forEach(dname => db.getMongo().getDB(dname).dropDatabase());
Run Code Online (Sandbox Code Playgroud)

这会删除所有数据库,但会保留 MongoDB 的内部集合。