MongoDB:删除名称与字符串匹配的所有集合

Posted

技术标签:

【中文标题】MongoDB:删除名称与字符串匹配的所有集合【英文标题】:MongoDB: Removing all collections whose name matches a string 【发布时间】: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() 或类似的操作,以确保删除的索引等都很好且干净?

谢谢。

【问题讨论】:

【参考方案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 实例)。

【讨论】:

以上是关于MongoDB:删除名称与字符串匹配的所有集合的主要内容,如果未能解决你的问题,请参考以下文章

使用匹配的查询从每个集合中删除所有文档

使用匹配的查询从每个集合中删除所有文档

MongoDB 集合连字符名称

如何检查 MongoDB 数据库中的所有集合以查找特定关键字?

从json字符串中的键字符串替换或删除Dote(。)以插入mongodb

MongoDB创建与删除集合(collection)