如何一次性删除大量的MongoDB集合?

24

我的数据库中有很多 MongoDB 集合需要删除。它们的名称很相似,如果可以使用通配符就很容易删除它们。但是看起来这是不可能的。

有没有一种方法可以一次选择多个集合并将它们删除?

5个回答

33

使用正则表达式可以使用 string.match

db.getCollectionNames().forEach(function(c) {
    if(!c.match("^system.indexes")) { 
        db.getCollection(c).drop();
    }
  });

3
请检查你的正则表达式。你的示例会删除 system.indexes 集合。我假设你原意是删除除了 system.indexes 以外的所有内容。 - wyattisimo
@wyattisimo 你说得对,正则表达式匹配了 system.indexes,是的,意图就是删除除了 system.indexes 以外的所有内容。谢谢! 我已经修复了代码。 - Yogesh Mangaj

16
# Delete Particular Collections From MongoDB

> use database_name

> delete_collection_list = ["collection1", "collection2", "collection3", "collection4", "collection5", "collection6"]

> delete_collection_list.forEach( function (collection) {
    if (db.getCollectionNames().indexOf(collection)>=0) {
        db.getCollection(collection).drop();
        print("Deleted Collection: "+ collection);
    }
  })

2
使用db.getCollection(collection)代替db[collection],以避免在集合名称为保留关键字(例如'group')时出现错误。 - boly38
这个没有做任何事情,缩进必须匹配吗?最后一个括号后面需要加分号吗? - mLstudent33
你不能只是正常地格式化代码吗?这样太过复杂了。 - avisk

10

您可以使用以下命令删除所有集合。

> use database_name;

> db.getCollectionNames().forEach(function(c) {
    if(c != 'system.indexes') { 
        db.getCollection(c).drop();
    }
  });

1
这仍然是逐个处理的,没有正则表达式 :) - Sergio Tulentsev

7

不,没有一种通配符/正则表达式可以删除多个集合。您必须逐个删除它们。我最近执行了类似的任务,我的脚本能够每秒删除约20-30个集合。你有多少个集合需要删除?


4

你可以在mongo shell中使用db.dropDatabase()删除数据库中的所有集合。在执行此操作之前,请确保您真的想要清空所有内容。


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