在MongoDB数据库中删除集合

5
有没有一种方法可以使用一个命令删除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

有没有一种方法可以在MongoDB数据库中删除所有集合,而不使用db.dropDatabase()?
2个回答

13

您可以尝试以下方法:

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

考虑到您的权限实验,它应该能够工作。

但是,如在MongoDB数据库中删除所有内容中提到的那样,使用dropDatabase()可以导致更合适的解决方案,因此查看用户的角色/权限可能是更可取的方法,以防情况再次发生。

同时,在那里您还会找到一个在撰写本文时更或多或少正确的方法,以避免删除系统集合(在任何部分中搜索"system.")。


1
唯一有点不对的是多了一个右括号。我试着把它删掉,但那少于10个字符的编辑最小限制,哈哈,真让人头疼。 - Woodchuck
1
我已经修复了 - 非常感谢您让我知道并提供快速反馈! - brezniczky

0

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

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

撤销访问权限:

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

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

show users;

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