我想知道是否有命令从MongoDB中删除每个数据库?
我知道如果我只想删除一个数据表,我只需要输入数据库的名称,如下面的代码,但我不想指定它.
mongo DB_NAME --eval 'db.dropDatabase();'
Run Code Online (Sandbox Code Playgroud)
ALo*_*LoR 135
你可以创建一个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();
}
Run Code Online (Sandbox Code Playgroud)
将它保存到dropall.js然后执行:
mongo dropall.js
Run Code Online (Sandbox Code Playgroud)
kev*_*kev 95
试试这个命令:
mongo --quiet --eval 'db.getMongo().getDBNames().forEach(function(i){db.getSiblingDB(i).dropDatabase()})'
Run Code Online (Sandbox Code Playgroud)
And*_*eas 17
您也可以使用简单的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();
})
Run Code Online (Sandbox Code Playgroud)
添加到@ALoR的答案中,为方便起见,您可以将以下内容放在〜/ .mongorc.js中
function dropDatabases(){
var mongo = db.getMongo();
var dbNames = mongo.getDBNames();
for (var i = 0; i < dbNames.length; i++) {
var db = mongo.getDB( dbNames[i] );
print( "Dropping database " + db.getName() + "..." );
db.dropDatabase();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在mongo shell中,您只需
dropDatabases()
Run Code Online (Sandbox Code Playgroud)
从文档:
Mongo将从调用mongo的用户的主目录中读取.mongorc.js文件。在文件中,用户可以定义变量,自定义mongo shell提示符或更新每次启动Shell时希望更新的信息。
将此保存到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();
}
Run Code Online (Sandbox Code Playgroud)
现在您可以执行:
mongo drop_all_dbs.js
Run Code Online (Sandbox Code Playgroud)
并且所有数据库(admin和local除外)都将被删除。
此答案是ALoR的副本,仅修复了系统数据库的丢失
小智 5
db
.getMongo()
.getDBNames()
.filter(n => !['admin','local','config'].includes(n))
.forEach(dname =>
db
.getMongo()
.getDB(dname)
.dropDatabase()
)
;
Run Code Online (Sandbox Code Playgroud)
db.getMongo().getDBNames().filter(n => !['admin','local','config'].includes(n)).forEach(dname => db.getMongo().getDB(dname).dropDatabase());
Run Code Online (Sandbox Code Playgroud)
这会删除所有数据库,但会保留 MongoDB 的内部集合。