【问题标题】:MongoDB: Removing all collections whose name matches a stringMongoDB:删除名称与字符串匹配的所有集合
【发布时间】:2012-10-11 16:45:21
【问题描述】:

我对我的数据库进行了一些重组,不再需要某些集合。然而,它们太多了,无法手动移除(实际上是数千个)。每个有问题的集合都以“cache_”开头,并包含几个我想确保完全清理的索引。

我试图了解如何使用 mongo shell 来遍历所有集合名称并删除那些以“cache_”开头的集合。根据Queries & Cursors documentation,我了解如何遍历集合中的文档,但不了解如何使用 MongoDB shell 来遍历数据库中的集合。

在伪代码中,这是我需要的:

var all_collections = show collections
for(var collection in all_collections)
    if(collection.name.indexOf('cache_')==0)
        collection.drop()

FWIW,我已经完成了“mongodb loop through collection names”等的搜索,但没有找到任何东西,但也许我在 googlez =P

在相关说明中...在进行了这种程度的重组之后,我是否应该执行db.repairDatabase() 或类似的操作,以确保删除的索引等都很好且干净?

谢谢。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    使用db.getCollectionNames() 获取所有集合并将它们存储在一个数组中。

    var collectionNames = db.getCollectionNames();
    for(var i = 0, len = collectionNames.length; i < len ; i++){
        var collectionName = collectionNames[i];
        if(collectionName.indexOf('cache_') == 0){
            db[collectionName].drop()
        }
    }
    

    【讨论】:

    • FTW,谢谢。我想我不知道 "show collections" => "db.getCollectionNames();"
    • db[collectionName] 是这里的关键。 在 RoboMongo 上执行的 JavaScript var collections = ['collection1','collection2'] collections.forEach(function(coll_name){ print(coll_name) db[coll_name].drop() })
    【解决方案2】:

    只是为了添加另一个答案on mongodb mailing list

    db.adminCommand("listDatabases").databases.forEach( function (d) {
      if (d.name != "local" && d.name != "admin" && d.name != "config")
         db.getSiblingDB(d.name).dropDatabase();
    })
    

    您可能不想删除我上面列出的 local/config/admin dbs。

    【讨论】:

    • 我做了:use toto 然后db.getSiblingDB("mydb").dropDatabase(); thx
    【解决方案3】:

    以下内容对我来说非常有用,可以删除由 map reduce 作业创建的集合。在我的情况下,它们在本地设置中被自动删除,但无论出于何种原因,它们都停留在服务器上。

    db.getCollectionNames().forEach( function (d) {
      if (d != "collectionICareAbout" && d != "system.indexes" && d != "system.users") {  
            print("dropping: " + d);
            db[d].drop();
      }
    })
    

    这与 Nishant 的回答类似,但不同之处在于我没有管理员权限,无法调用 db.adminCommand(托管的 mongo 实例)。

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2013-01-29
      • 1970-01-01
      相关资源
      最近更新 更多