在MongoDB数据库中删除集合

25 浏览
0 Comments

在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"
}

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

> use MyDb
switched to db MyDb
> db.collection1.drop();
true
> db.collection2.drop();
true
> db.collection3.drop();
true

那么有没有 方法可以除了使用db.dropDatabase()之外删除MongoDB数据库中的所有集合?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以授权root角色访问(例如:admin)用户:

use admin;
db.grantRolesToUser("admin", ["root"]);
use MyDb;
db.dropDatabase();

要撤销访问权限:

use admin;
db.revokeRolesFromUser("admin", ["root"]);

您可以通过以下方式显示用户的角色

show users;

0
0 Comments

你可以尝试以下操作:

db.getCollectionNames().forEach(function(x) {db[x].drop()})

鉴于你的特权实验,这应该是有效的。

然而,使用dropDatabase()可能会导致更合适的解决方案,如在MongoDB数据库中删除所有内容中所提到的,因此,查看你的用户角色/权限可能是一个更可取的方法,以防该场景再次出现。

你还会在那里找到一个比较正确的方法来避免删除系统集合(“system.”在集合名称的任何部分中都会被寻找)。

0