mongoexport / mongoimport 是什么
mongoexport 把集合导出成 JSON 或 CSV 供外部系统使用,mongoimport 把文件导入集合。它们的定位是数据交换而不是备份:JSON 模式下日期、ObjectId 等类型用扩展 JSON 表达,再次导入要保证工具能正确解析;CSV 模式所有值默认按文本处理,需要用类型声明才能还原数字与日期。整库备份恢复应该用 mongodump 与 mongorestore,处理的是原生 BSON,不会有类型失真。
基本信息
| 导出 | mongoexport --collection=orders --type=json --out=orders.json |
|---|---|
| 导入 | mongoimport --file=orders.json --collection=orders2 |
| CSV 支持 | 需 --fields,类型还原用 --columnsHaveTypes |
| 连接串 | --uri="mongodb://user:pass@host:27017/db?authSource=db" |
| 备份替代 | 整库备份恢复用 mongodump / mongorestore |
| 所属系统 | MongoDB Database Tools(独立安装的命令行工具集) |
典型使用场景
- 数据交付:给分析方一份 JSON 或 CSV 明细文件
- 迁移取样:从生产导出小批量数据到测试环境复现问题
- 外部交换:向不具备 MongoDB 驱动的一方提供可读文件
- 结构核对:导出后人工检查文档结构是否符合建模预期
- 批量补数:按固定模板整理数据后用 mongoimport 灌入
导出与导入
导出与导入
# 导出 JSON,日期等类型以扩展 JSON 表达
mongoexport --uri="mongodb://app:secret@127.0.0.1:27017/app?authSource=app" \
--collection=orders --type=json --out=orders.json
# 导入到另一个集合
mongoimport --uri="mongodb://app:secret@127.0.0.1:27017/app?authSource=app" \
--collection=orders2 --file=orders.json
# CSV 需要声明列与类型,否则全部按字符串处理
mongoexport --collection=orders --type=csv --fields=_id,total,ts --out=orders.csv
mongoimport --collection=orders2 --type=csv --file=orders.csv --columnsHaveTypes \
--fields="_id.string(),total.double(),ts.date_iso()"常用参数
| 参数 | 含义 | 注意 |
|---|---|---|
| --type | 导出格式 json / csv | CSV 必须配合 --fields |
| --out / --file | 输出与输入文件 | 默认按 UTF-8 处理 |
| --columnsHaveTypes | CSV 按声明类型解析 | 不声明则全部是字符串 |
| 扩展 JSON | 日期与 ObjectId 的表达 | 跨工具导入前确认能被解析 |
| mongodump / mongorestore | BSON 级备份恢复 | 整库迁移优先这一对 |
JSON 导出与 BSON 序列化存在差异(日期会变成扩展 JSON 对象),跨库迁移优先 mongodump;mongoexport 的定位是数据交换。
导出的 _id 用扩展 JSON 形式表达(形如带 $oid 的嵌套对象),再次导入时要确认目标工具版本能识别,否则会被写成普通嵌套文档。
导出前用 countDocuments 记录条数,导入后用同样的条件再数一次,是校验数据是否完整最简单也最可靠的一步。