2015-09-30 67 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