2011-06-16 51 views
68

我想知道是否有命令從我的MongoDB中刪除每個數據庫?MongoDB刪除每個數據庫

我知道如果我只想刪除一個數據表,我只需鍵入數據庫的名稱,如下面的代碼,但我不想指定它。

mongo DB_NAME --eval 'db.dropDatabase();' 

回答

108

,你可以創建一個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(); 
} 

保存到dropall.js,然後執行:

mongo dropall.js 
+12

'var mongo = db.getMongo(); mongo.getDBNames()。forEach(function(dbname)var db = mongo.getDB(dbname); db.dropDatabase(); });' – tjmehta 2013-04-24 02:13:24

+0

您也可以複製粘貼上面的代碼並將其鍵入蒙戈控制檯。 – 2015-05-19 14:05:22

+1

這使我的系統數據庫(Mongo版本2.4.3)下降。我不得不重新啓動mongodb進程以使其再次工作。 – 2015-09-02 07:11:26

4

你可以很容易做到這一點通過C#官方驅動:

var _mongoServer = MongoServer.Create("mongodb://localhost:27020"); 

var names = _mongoServer.GetDatabaseNames(); 
foreach (var name in names) 
{ 
    _mongoServer.DropDatabase(name); 
} 
+0

是的,它可能是一個想法,但我想這樣做沒有C#。 (哦,對不起,我用這個問題的標籤C#) – Gui 2011-06-16 18:21:34

+0

你可以創建一個JavaScript循環來完成這項工作,然後在mongoconsole中執行它。 – ALoR 2011-06-16 20:07:19

+2

@AndrewOrsich和@JohnSmith我已經發布了腳本。 – ALoR 2011-06-17 11:42:10

11

你也可以用一個簡單的命令蒙哥做到這一點:

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

添加到@亞羅士打的答案,爲了方便你可以在~/.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(); 
    } 
} 

然後在蒙戈外殼,你可以簡單地做

dropDatabases() 

從文檔:

蒙戈將讀取用戶調用蒙戈的主目錄中的文件.mongorc.js。在文件中,用戶可以定義變量,定製mongo shell提示符,或更新每次啓動shell時更新的信息。

+0

對我而言,這沒有奏效。我通過添加fol – titusmagnus 2013-06-24 02:34:14

+0

來修復它我已經做出更新來糾正這些問題。感謝您的支持! – btiernay 2014-11-13 00:40:28

68

試試這個命令:

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})' 
+1

工程很好,你不必爲它創建一個js文件。尼斯。 – 2013-11-25 13:50:22

+0

什麼是對稱加載它? – nha 2014-09-13 19:14:02

+0

我剛剛發現的這種方法的一個問題是,db var通過mongo控制檯會話持續存在,所以如果有人正在與其中一個數據庫進行交互,那麼它將被db.getSiblingDB調用排除。 – 2016-04-21 18:30:16

1

保存這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(); 
} 

現在可以執行:

mongo drop_all_dbs.js 

和所有數據庫(除管理和當地)將被丟棄。

這個答案是亞羅士打的一個副本,剛修好系統DBS的下降