【问题标题】:Drop Collections in MongoDB Database删除 MongoDB 数据库中的集合
【发布时间】:2018-11-26 19:27:16
【问题描述】:

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

根据我的found,执行此操作的命令似乎是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 数据库中的所有集合

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您可以尝试以下方法:

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

    考虑到你的权限,它应该可以工作。

    但是,dropDatabase() 应该会导致更合适的解决方案,如Delete everything in a MongoDB database 中所述, 因此,如果该场景再次发生,查看用户的角色/权限可能是一种更可取的方法。

    您还会发现当时正在编写或多或少正确的方法来避免删除那里的系统集合(在集合名称的任何部分都需要“system.”)。

    【讨论】:

    • 唯一稍有偏差的是有一个额外的右括号。我尝试删除它,但这少于 10 个字符的最低编辑,哈哈。
    • 我已修复 - 非常感谢您让我知道和快速反馈!
    【解决方案2】:

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

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

    撤销访问权限:

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

    您可以通过

    显示用户角色
    show users;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2023-03-06
      • 2012-07-12
      • 1970-01-01
      • 2016-02-13
      相关资源
      最近更新 更多