2015-09-30 66 views
2

我有一堆空的數據庫出現在我的MongoDB中(不時出現,原因不明),我正在尋找一種簡單的方法來刪除所有空的數據庫。這是'show dbs'命令的一部分結果,清楚哪些是空的,哪些不是。從MongoDB中刪除空數據庫

rs0:PRIMARY> show dbs 
1442036273   (empty) 
1442643016   (empty) 
1443249599   (empty) 
<script>document  (empty) 
<script>foo<   (empty) 
CFIDE    (empty) 
CSCOnm    (empty) 
CVS     (empty) 
ConsoleHelp   (empty) 
ControllerWeb  (empty) 
DB4Web    (empty) 
MYDB     0.203GB 
HNAP1    (empty) 
IDMProv    (empty) 
MM     (empty) 
MSWSMTP    (empty) 
NASApp    (empty) 
Orion    (empty) 
OvCgi    (empty) 
Reporting   (empty) 
SAPHostControl  (empty) 
... 

任何想法?

+0

下面的答案是否幫助你解決了這個問題? – chridam

+1

是的,我試過chridam的方法,它的工作。苛刻Makani似乎有一個相似的想法,但很好地包裹在一個.js文件:) – BoriS

回答

5

使用listDatabases命令來獲得具有空數據的數據庫的數組,遍歷列表並調用dropDatabase數據庫對象上的方法。下面演示了這個

> use admin 
> var dbs = db.adminCommand("listDatabases").databases 
> printjson(dbs) 
[ 
     { 
       "name" : "admin", 
       "sizeOnDisk" : 83886080, 
       "empty" : false 
     }, 
     { 
       "name" : "local", 
       "sizeOnDisk" : 83886080, 
       "empty" : false 
     }, 
     { 
       "name" : "test", 
       "sizeOnDisk" : 486539264, 
       "empty" : false 
     }, 
     { 
       "name" : "test2", 
       "sizeOnDisk" : 0, 
       "empty" : true 
     }, 
     { 
       "name" : "test3", 
       "sizeOnDisk" : 0, 
       "empty" : true 
     } 
] 
> var emptyDbs = dbs.filter(function(db){ return db.empty; }); 
> printjson(emptyDbs) 
[ 
     { 
       "name" : "test2", 
       "sizeOnDisk" : 0, 
       "empty" : true 
     }, 
     { 
       "name" : "test3", 
       "sizeOnDisk" : 0, 
       "empty" : true 
     } 
] 

> emptyDbs.forEach(function(e){ 
    var db = new Mongo().getDB(e.name); 
    db.dropDatabase(); 
}) 
0

AFAIK沒有簡單的方法來刪除空的數據庫。

您可以使用在蒙戈外殼

  • 使用DB名稱
  • db.dropDatabase()
1

,你可以創建一個JavaScript循環,做的工作,然後執行以下步驟它在mongoconsole。

var dbs = db.getMongo().getDBNames() 
for(var i in dbs){ 
    if (db.getCollectionNames() != null) { 
     continue; 
    } 
    db = db.getMongo().getDB(dbs[i]); 
    print("dropping db " + db.getName()); 
    db.dropDatabase(); 
} 

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

mongo dropemptydbs.js