删除 MongoDB 数据库中的集合

J W*_*uck 3 mongodb

有没有一种方法可以使用一个命令删除 MongoDB 数据库中的所有集合,而无需为每个单独的集合命名?

根据我的发现,执行此操作的命令似乎是db.dropDatabase(). 但这给了我一个未经授权的错误:

> use MyDb
switched to db MyDb
> db.dropDatabase();
{
    "ok" : 0,
    "errmsg" : 
        "not authorized on MyDb to execute command 
            { dropDatabase: 1.0, $db: \"MyDb\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
}
Run Code Online (Sandbox Code Playgroud)

但是,我可以毫无问题地删除数据库中的每个集合db.collection.drop()

> use MyDb
switched to db MyDb
> db.collection1.drop();
true
> db.collection2.drop();
true
> db.collection3.drop();
true
Run Code Online (Sandbox Code Playgroud)

那么有没有办法删除 MongoDB 数据库中的所有集合而不是使用db.dropDatabase()

bre*_*zky 9

您可以尝试以下操作:

db.getCollectionNames().forEach(function(x) {db[x].drop()})
Run Code Online (Sandbox Code Playgroud)

鉴于您对特权的实验,它应该有效。

但是, dropDatabase() 应该会导致更合适的解决方案,如删除 MongoDB 数据库中的所有内容 中所述,因此如果场景再次出现,查看用户的角色/权限可能是一种更可取的方法。

您还会在当时找到一种或多或少正确的方法来避免删除系统集合(在集合名称的任何部分中寻找“system.”)。