MongoDB删除每个数据库

MongoDB删除每个数据库,mongodb,Mongodb,我想知道是否有从我的MongoDB中删除所有数据库的命令 我知道如果我只想删除一个datatable,我只需要像下面的代码一样键入数据库的名称,但我不想指定它 mongo DB_NAME --eval 'db.dropDatabase();' 您可以通过c#官方驱动程序轻松实现: var _mongoServer = MongoServer.Create("mongodb://localhost:27020"); var names = _mongoServer.GetDatabaseNam

我想知道是否有从我的MongoDB中删除所有数据库的命令

我知道如果我只想删除一个datatable,我只需要像下面的代码一样键入数据库的名称,但我不想指定它

mongo DB_NAME --eval 'db.dropDatabase();'

您可以通过c#官方驱动程序轻松实现:

var _mongoServer = MongoServer.Create("mongodb://localhost:27020");

var names = _mongoServer.GetDatabaseNames();
foreach (var name in names)
{
   _mongoServer.DropDatabase(name);
}

您可以创建一个javascript循环来完成这项工作,然后在mongoconsole中执行它

var dbs = db.getMongo().getDBNames()
for(var i in dbs){
    db = db.getMongo().getDB( dbs[i] );
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}
将其保存到dropall.js,然后执行:

mongo dropall.js
mongo drop_all_dbs.js

您也可以使用一个简单的mongo命令执行此操作:

db.adminCommand("listDatabases").databases.forEach( function (d) {
    if (d.name != "local" && d.name != "admin"  && d.name != "apiomat"  && d.name != "config")
        db.getSiblingDB(d.name).dropDatabase();
 })

为了方便起见,您可以在@ALoR的答案中添加以下内容

从文档中:

Mongo将从调用Mongo的用户的主目录中读取.mongorc.js文件。在该文件中,用户可以定义变量、自定义mongo shell提示符,或者更新希望在每次启动shell时更新的信息

请尝试以下命令:

mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'

将此保存到drop_all_dbs.js:

var databases = db.getMongo().getDBNames()
for(var i in databases){
    db = db.getMongo().getDB( databases[i] );
    if(db.getName() == "admin" || db.getName() == "local"){
        print("skipping db " + db.getName())
        continue
    }
    print( "dropping db " + db.getName() );
    db.dropDatabase();
}
现在您可以执行:

mongo dropall.js
mongo drop_all_dbs.js
所有数据库(除管理员和本地数据库外)都将被删除

这个答案是ALoR的一个副本,只需修复系统dbs的下降

就可以了

mongo --eval 'db.dropDatabase()'
或者,您可以在终端上启动mongo会话并写入

db.dropDatabase()
完全一样。

db
.getMongo()
.getDBNames()
.filter(n=>!['admin','local','config'].包括(n))
.forEach(dname=>
分贝
.getMongo()
.getDB(dname)
.dropDatabase()
)
;
db.getMongo().getDBNames().filter(n=>!['admin','local','config'].includes(n)).forEach(dname=>db.getMongo().getDB(dname).dropDatabase());

这将删除所有DBs,但保留MongoDB的内部集合。

是的,这可能是一个想法,但我想在没有C#的情况下完成。(哦,对不起,我在这个问题上使用了标记C。)您可以创建一个javascript循环来完成这项工作,然后在mongoconsole中执行它。@AndrewOrsich和@JohnSmith我已经发布了脚本。
var mongo=db.getMongo();forEach(函数(dbname){var db=mongo.getDB(dbname);db.dropDatabase();})您也可以复制上面的粘贴代码并在mongo控制台上键入。这会删除我的系统数据库(mongo版本2.4.3)。我必须重新启动mongodb进程才能使其再次工作。我认为当有人想要删除他们的数据库时,他们不想删除mongo内部数据库,如admin和local。此外,还有存储事务的配置数据库。工作非常好,您不必为其创建js文件。很好。加载它的符号是什么?我刚刚发现这种方法的一个问题是,db var通过mongo控制台会话持续存在,因此如果有人与其中一个数据库交互,那么它将被db.getSiblingDB call.Nice排除。这非常适合Docker:D
Docker exec mongodb sh-c“mongo--quiet--eval'db.getMongo().getDBNames().forEach(函数(i){db.getSiblingDB(i.dropDatabase()})”“
我也遇到过同样的问题,我发现这是自动化任务的最佳解决方案。您并不急于编写新文件并在CI/CD管道中下载,因此一行脚本非常易于管理我已进行了更新以纠正问题。谢谢你叫我进来!问题是如何删除所有数据库,而不是单个数据库,而不是为每个数据库编写if条件,我们可以简单地放入一个数组并执行indexOf。只有这样才能很好地工作。