如何指定mongodump的完整输出路径与自定义导出文件名
解决方案
原生mongodump不支持直接自定义完整输出文件名,它的--out参数仅能指定输出根目录,会自动按照<根目录>/<数据库名>/<集合名>.bson.gz(开启gzip时)的规则生成文件结构。你当前出现多层重复路径,就是因为指定的根目录已经包含了库名、集合名,mongodump又自动追加了一层库名、集合名路径导致的。
你要实现目标路径的需求,可以通过以下两种方案实现:
方案1:mongodump + 导出后重命名
这种方案保留mongodump导出的BSON格式,适合用于数据备份恢复场景,操作步骤:
- 调整
mongodump的--out参数为上层根目录,不要包含库名、集合名 - 导出完成后,将自动生成的默认文件移动重命名到你期望的路径
代码调整示例(Python):
import os import subprocess # 提前创建目标目录 target_dir = f"{file_path}/{database}/{collection}" os.makedirs(target_dir, exist_ok=True) # 调整mongodump的out参数为根目录 dump_root = file_path query_input = '{"metadata_id": {"$oid": "%s"}}' % metadata_id # 用subprocess传列表参数,避免手动转义特殊字符的问题 command = [ "mongodump", "--uri", f"{connection_string}{database}", "--collection", collection, "--query", query_input, "--gzip", "--out", dump_root, "--quiet" ] subprocess.run(command, check=True) # 重命名文件到目标路径 default_dump_path = f"{dump_root}/{database}/{collection}.bson.gz" target_path = f"{target_dir}/{metadata_id}.json.gz" # 若需要保留bson格式可修改后缀 os.rename(default_dump_path, target_path)
方案2:改用mongoexport直接指定输出路径
如果你需要的是JSON格式的导出文件,适合数据解析、导入其他系统场景,直接用mongoexport即可,它的--out参数支持直接指定完整的输出文件路径,不需要后续重命名:
代码示例:
import os import subprocess target_dir = f"{file_path}/{database}/{collection}" os.makedirs(target_dir, exist_ok=True) target_path = f"{target_dir}/{metadata_id}.json.gz" query_input = '{"metadata_id": {"$oid": "%s"}}' % metadata_id command = [ "mongoexport", "--uri", f"{connection_string}{database}", "--collection", collection, "--query", query_input, "--gzip", "--out", target_path, "--quiet" ] subprocess.run(command, check=True)
内容的提问来源于stack exchange,提问作者KeykoYume
相关产品推荐
相关产品推荐

