You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Python正则匹配MongoDB_Clean结尾集合及删除expn结尾数据库

解决MongoDB集合匹配与数据库删除的正则问题

没问题,我来帮你搞定这两个正则相关的MongoDB操作问题!

一、修正匹配末尾带_Clean的集合名正则

你原来的正则"(?!)(_Clean)\Z"有两个问题:一是(?!是未闭合的负前瞻语法,完全没必要;二是写法绕远路了。其实要匹配**末尾精确带有_Clean**的集合名,用最简单的末尾匹配正则就够了。

正确实现代码

from pymongo import MongoClient
import re

client = MongoClient()
db = client.guns

# 匹配集合名末尾的"_Clean",用$或\Z都可以(\Z更严格,匹配字符串绝对末尾)
pattern = re.compile(r"_Clean\Z")

for collection_name in db.list_collection_names():
    if pattern.search(collection_name):
        # 这里执行针对带_Clean集合的操作
        print(f"处理集合: {collection_name}")
        # 比如获取集合对象:collection = db[collection_name]
    else:
        # 执行其他操作
        print(f"跳过集合: {collection_name}")

正则说明

  • r"_Clean\Z":\Z表示匹配字符串的绝对末尾,确保_Clean是集合名的最后几个字符,不会出现比如Test_Clean_Extra这种被误匹配的情况。
  • 如果想忽略大小写(比如_clean也匹配),可以加re.IGNORECASE参数:re.compile(r"_Clean\Z", re.IGNORECASE)

二、删除名称末尾带有expn的MongoDB数据库

要实现这个需求,需要先获取所有数据库名称,用正则匹配筛选出符合条件的,再调用drop_database()方法删除。

实现代码

from pymongo import MongoClient
import re

client = MongoClient()

# 匹配数据库名末尾的"expn"
db_pattern = re.compile(r"expn\Z")

# 获取所有数据库名称
all_dbs = client.list_database_names()

for db_name in all_dbs:
    # 注意:MongoDB默认的admin、local等系统数据库建议不要误删,这里可以加判断排除
    if db_name in ["admin", "local", "config"]:
        continue
    if db_pattern.search(db_name):
        print(f"准备删除数据库: {db_name}")
        client.drop_database(db_name)
        print(f"数据库 {db_name} 删除成功")

注意事项

  • 一定要排除系统数据库(admin、local、config),避免误删导致MongoDB异常。
  • 如果需要更灵活的匹配(比如忽略大小写),同样可以添加re.IGNORECASE参数。

内容的提问来源于stack exchange,提问作者Pendelluft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:52:54