一、核心思路
- 获取当前数据库下的所有集合名称;
- 筛选出:格式为
yyyy-MM-dd,名称字符串小于2024-01-01(我定义的时间)的集合; - 批量执行集合删除操作(使用
drop()方法)。
二、mongoSH 中执行完整的代码
bash
// 1. 先切换到目标数据库(替换为你的实际数据库名,如 use terminal_db; 不可省略)
use your_database_name;
// 2. 核心逻辑:筛选并删除符合条件的集合
// 获取当前数据库的所有集合名称
const allCollections = db.getCollectionNames();
// 定义目标日期(用于比较)和日期格式正则(匹配 yyyy-MM-dd)
const targetDate = "2024-01-01";
// 正则表达式:严格匹配 yyyy-MM-dd 格式(年4位-月2位-日2位,符合日期合法性校验)
const datePattern = /^\d{4}-\d{2}-\d{2}$/;
// 遍历所有集合,筛选并删除
allCollections.forEach(collectionName => {
// 第一步:判断集合名是否为 yyyy-MM-dd 格式
if (datePattern.test(collectionName)) {
// 第二步:判断集合名是否小于 2024-01-01(字符串字典序与日期序一致,可直接比较)
if (collectionName < targetDate) {
console.log(`即将删除集合:${collectionName}`);
// 执行删除操作(drop() 方法彻底删除集合)
const deleteResult = db[collectionName].drop();
// 打印删除结果
if (deleteResult) {
console.log(`✅ 集合 ${collectionName} 删除成功`);
} else {
console.log(`❌ 集合 ${collectionName} 删除失败(可能不存在或无权限)`);
}
}
}
});
console.log("🔍 所有符合条件的集合删除流程执行完毕");

三、关键说明
1.集合名筛选规则
- 正则
^\d{4}-\d{2}-\d{2}$:严格匹配yyyy-MM-dd格式(例如2023-12-31匹配,2024-01、2023/12/31不匹配); - 字符串比较
collectionName < "2024-01-01":因yyyy-MM-dd格式的字符串字典序与日期时间序完全一致,直接比较即可准确筛选出早于2024-01-01的集合(如2023-12-31、2023-01-01等)。
2.核心方法解释
db.getCollectionNames():获取当前数据库下的所有集合名称,返回一个字符串数组;db[collectionName].drop():通过集合名字符串动态获取集合并执行删除(因集合名是变量,不能用db.collectionName.drop(),需用方括号语法);RegExp.test():验证集合名是否符合yyyy-MM-dd格式。
3.安全注意事项
- 执行前务必确认已切换到正确的数据库 (可先用
db.getName()查看当前数据库); drop()方法是不可逆操作:会彻底删除集合的所有文档、索引和结构,无备份无法恢复;- 可先注释删除代码(仅打印待删除集合),确认无误后再执行删除:
bash
// 注释删除代码,先预览待删除集合
allCollections.forEach(collectionName => {
if (datePattern.test(collectionName) && collectionName < targetDate) {
console.log(`待删除集合:${collectionName}`); // 仅预览,不删除
}
});