我的数据库中有很多 MongoDB 集合需要删除。它们的名称很相似,如果可以使用通配符就很容易删除它们。但是看起来这是不可能的。
有没有一种方法可以一次选择多个集合并将它们删除?
我的数据库中有很多 MongoDB 集合需要删除。它们的名称很相似,如果可以使用通配符就很容易删除它们。但是看起来这是不可能的。
有没有一种方法可以一次选择多个集合并将它们删除?
使用正则表达式可以使用 string.match
db.getCollectionNames().forEach(function(c) {
if(!c.match("^system.indexes")) {
db.getCollection(c).drop();
}
});
# 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);
}
})
db.getCollection(collection)
代替db[collection]
,以避免在集合名称为保留关键字(例如'group')时出现错误。 - boly38您可以使用以下命令删除所有集合。
> use database_name;
> db.getCollectionNames().forEach(function(c) {
if(c != 'system.indexes') {
db.getCollection(c).drop();
}
});
不,没有一种通配符/正则表达式可以删除多个集合。您必须逐个删除它们。我最近执行了类似的任务,我的脚本能够每秒删除约20-30个集合。你有多少个集合需要删除?
你可以在mongo shell中使用db.dropDatabase()
删除数据库中的所有集合。在执行此操作之前,请确保您真的想要清空所有内容。
system.indexes
集合。我假设你原意是删除除了system.indexes
以外的所有内容。 - wyattisimosystem.indexes
,是的,意图就是删除除了system.indexes
以外的所有内容。谢谢! 我已经修复了代码。 - Yogesh Mangaj