如何在MongoDB中删除所有数据库?

3
我有一个MongoDB数据库列表,如何删除除localadminconfig之外的所有数据库?
enter image description here

有趣。似乎没有一种以编程友好的方式枚举数据库(或它们的名称)的方法。虽然有一种方法可以枚举集合,但却没有针对数据库的。 - Sergio Tulentsev
如果你知道名称,那么这很简单:db.getSiblingDB('Marks').dropDatabase()。因此,你可以直接硬编码这些名称。 - Sergio Tulentsev
请检查此链接:https://dev59.com/oHA75IYBdhLWcg3wT3L8 - Pranta Saha
1
@SergioTulentsev,实际上有一种方法可以做到这一点,只是没有正式记录。请参见我下面的答案。 - kevinadi
2个回答

7
您可以在 mongo shell 中使用 getDBNames() 方法。必须从 Mongo() 实例 调用此方法。不幸的是,我认为文档中没有记录 getDBNames() 方法。获取数据库名称后,您可以通过类似以下内容的循环来删除不需要的数据库:
Mongo().getDBNames().forEach(function(x) {
  // loop through all the database names
  if (['admin', 'config', 'local'].indexOf(x) < 0) {
    // drop database if it's not admin, config, or local
    Mongo().getDB(x).dropDatabase();
  }
})

例如:

> show dbs
admin   0.000GB
config  0.000GB
local   0.001GB
test    0.000GB
test2   0.000GB
test3   0.000GB

> Mongo().getDBNames().forEach(function(x) {
...   if (['admin', 'config', 'local'].indexOf(x) < 0) {
...     Mongo().getDB(x).dropDatabase();
...   }
... })

> show dbs
admin   0.000GB
config  0.000GB
local   0.001GB

5
我使用这个教程提供的方案解决了这个问题:教程
我在我的mongo shell中运行了这段代码:
var dbs = db.getMongo().getDBNames()
for(var i in dbs){
    db = db.getMongo().getDB( dbs[i] );
    if (db.getName() !== 'admin' && db.getName() !== 'local') 
    {
        print( "dropping db " + db.getName() );  
        db.dropDatabase();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接