从MongoDB中删除空数据库

时间:2015-09-30 13:24:10

标签: mongodb

我有一堆空数据库出现在我的MongoDB中(不时出现,原因不明),我正在寻找一种简单的方法来删除所有空数据库。这是'show dbs'命令的一部分结果,很清楚哪些是空的,哪些不是。

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)
...

有什么想法吗?

3 个答案:

答案 0 :(得分: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();
})

答案 1 :(得分: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

答案 2 :(得分:0)

AFAIK没有简单的方法来删除空的数据库。

您可以在mongo shell中使用以下步骤

  • 使用数据库名称
  • db.dropDatabase()