mongodb - 删除 MongoDB 数据库中的集合

标签 mongodb

有没有一种方法可以使用一个命令删除 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数据库中除之外的所有集合?

最佳答案

您可以尝试以下操作:

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

考虑到您对权限的实验,它应该有效。

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

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

关于mongodb - 删除 MongoDB 数据库中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53487762/

相关文章:

java - 数据库模型的依赖注入(inject)

java - 如何使用现有集合 mongodb 中的计算数据创建新集合

javascript - 相应地添加/删除 Mongoose 中的元素

javascript - 如何使用 Vue.js、Vuex、Express、MongoDB 检索当前用户数据

MongoDB 用 $type 匹配一个数组?

mongodb - 在 Mongodb 的查询中执行日期添加

mongodb - 重新创建 MongoDB 容器不会重新运行 docker-entrypoint-initdb.d 中的 config.js 文件

mongodb - 从对象数组删除键值时出错

mongodb - 无法启动 "mongod",立即中止

MongoDB SpiderMonkey 不理解 UTF-8