Showing Posts From
MongoDB
MongoDB 导出数据:mongodump 和 mongoexport 怎么选
MongoDB 导出数据有两个官方工具,用途各不同:mongodump — 二进制 BSON,用于完整备份和恢复(配合 mongorestore) mongoexport — JSON / CSV 明文,用于数据处理和迁移到其它系统搞混了会踩坑:拿 BSON 想给别的系统吃是不行的,拿 JSON 恢复也丢索引和元数据。 mongodump:完整备份 mongodump \ --host localhost \ --port 27017 \ --db test \ --out ./backup产物: backup/ └── test/ ├── users.bson # 数据(BSON 格式) ├── users.metadata.json # 索引、options 等元信息 └── orders.bson恢复: mongorestore ./backup # 或指定库 mongorestore --nsInclude "test.*" ./backupgzip 压缩: mongodump --db test --archive=backup.gz --gzip mongorestore --archive=backup.gz --gzip生产备份用这个——单文件、自带索引元数据、恢复一步到位。 mongoexport:导出 JSON / CSV mongoexport \ --db test \ --collection users \ --out users.json默认是 NDJSON(每行一个 JSON 对象): {"_id":{"$oid":"..."},"name":"Tom","age":18} {"_id":{"$oid":"..."},"name":"Jerry","age":22}想要标准 JSON 数组: mongoexport --db test --collection users --jsonArray --out users.json导出 CSV: mongoexport \ --db test \ --collection users \ --type=csv \ --fields=name,age,email \ --out users.csvCSV 必须显式列出 --fields,不给字段名会报错。 条件导出 --query 是 MongoDB shell 的 JSON 语法: mongoexport \ --db test \ --collection users \ --query '{"age":{"$gt":18},"status":"active"}' \ --out active_users.json日期区间过滤: --query '{"createdAt":{"$gte":{"$date":"2026-01-01T00:00:00Z"}}}'带账号密码 推荐用 URI 一把传: mongoexport \ --uri="mongodb://admin:PASSWORD@127.0.0.1:27017/test?authSource=admin" \ --collection users \ --jsonArray \ --out users.json或者分开: mongodump \ --host localhost --port 27017 \ --username admin --password PASSWORD \ --authenticationDatabase admin \ --db test --out backupauthSource=admin 很重要——默认认证库是当前 db,绝大多数生产环境把用户建在 admin 库。 Docker 里的 MongoDB 进容器里跑: docker exec -it mongo mongodump --db test --out /tmp/backup docker cp mongo:/tmp/backup ./backup或者从宿主机直连(容器映射了端口): mongodump --host 127.0.0.1 --port 27017 --db test --out ./backupPython 版本 from pymongo import MongoClient import jsonclient = MongoClient("mongodb://localhost:27017") col = client["test"]["users"]# 不要 _id 字段,方便导入到其它系统 data = list(col.find({}, {"_id": 0}))with open("users.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2)按条件流式导出(大数据集省内存): import jsonwith open("users.ndjson", "w", encoding="utf-8") as f: for doc in col.find({"age": {"$gt": 18}}, {"_id": 0}): f.write(json.dumps(doc, ensure_ascii=False) + "\n")一张对比表需求 用什么备份 + 恢复到 MongoDB mongodump迁移到 MongoDB(跨版本、跨集群) mongodump + mongorestore导出给下游数据管道用 mongoexport --jsonArray导出给 Excel / BI mongoexport --type=csv定制字段结构、脱敏 Python + pymongo增量导出 --query + 时间戳过滤一句话总结 备份恢复用 mongodump,跨系统迁移用 mongoexport。Docker 容器里跑要注意 exec 进去或映射端口。生产环境永远用 URI + authSource=admin。
