从MongoDB中删除空数据库

从MongoDB中删除空数据库,mongodb,Mongodb,我的MongoDB中出现了一堆空数据库(有时出于未知原因),我正在寻找一种简单的方法来删除所有空数据库。下面是“showdbs”命令的一段结果,很清楚哪些是空的,哪些不是空的 rs0:PRIMARY> show dbs 1442036273 (empty) 1442643016 (empty) 1443249599 (empty) <script>document (empty) <script>f

我的MongoDB中出现了一堆空数据库(有时出于未知原因),我正在寻找一种简单的方法来删除所有空数据库。下面是“showdbs”命令的一段结果,很清楚哪些是空的,哪些不是空的

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)
...
rs0:PRIMARY>显示数据库
1442036273(空)
1442643016(空)
1443249599(空)
文件(空)
foo<(空)
CFIDE(空)
CSCOnm(空)
CVS(空)
控制台帮助(空)
控制器Web(空)
DB4Web(空)
MYDB 0.203GB
HNAP1(空)
IDMProv(空)
毫米(空)
MSWSMTP(空)
NASApp(空)
猎户座(空)
OvCgi(空)
报告(空)
SAPHostControl(空)
...

有什么想法吗?

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

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

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

您可以创建一个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
使用命令获取包含空数据的数据库数组,迭代列表并调用数据库对象上的方法。下面就说明了这一点

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

下面的答案有没有帮助你解决这个问题?是的,我试过chridam的方法,效果很好。Harsh Makani似乎有类似的想法,但很好地包装在一个.js文件中:)