一、二进制导入导出(推荐)
适用场景:全量备份/恢复,保留索引和元数据
工具:mongodump
和 mongorestore
1. 导出数据 (mongodump)
bash
mongodump --host <hostname> --port <port> \
--username <username> --password <password> \
--db <database_name> \
--collection <collection_name> \
--out <output_directory>
常用参数:
- --gzip: 压缩输出
- --query: 按条件导出数据
- --authenticationDatabase: 认证数据库
2. 导入数据 (mongorestore)
bash
mongorestore --host <hostname> --port <port> \
--username <username> --password <password> \
--db <target_database> \
<input_directory>
常用参数:
- --drop: 导入前清空集合
- --gzip: 解压导入
- --nsInclude: 指定导入的命名空间
二、JSON/CSV 导入导出
适用场景:跨平台数据交换,可读性强
工具:mongoexport
和 mongoimport
1. 导出为 JSON/CSV (mongoexport)
bash
mongoexport --host <hostname> --port <port> \
--username <username> --password <password> \
--db <database_name> \
--collection <collection_name> \
--type json (或 csv) \
--fields <field1,field2> \
--out <output_file.json>
常用参数:
- --query: 按条件导出(使用 JSON 格式)
- --limit: 限制导出条数
- --pretty: 格式化输出
2. 导入 JSON/CSV (mongoimport)
bash
mongoimport --host <hostname> --port <port> \
--username <username> --password <password> \
--db <database_name> \
--collection <collection_name> \
--type json (或 csv) \
--file <input_file.json>
常用参数:
- --drop: 导入前清空集合
- --headerline: CSV 文件包含表头
- --upsert: 使用更新插入模式
三、注意事项
- 数据类型兼容性
JSON 格式可能丢失 MongoDB 特有类型(如 Date, ObjectId),建议优先使用二进制格式。 - 索引处理
mongoexport/import 不会保留索引,需手动重建;mongodump/restore 会保留索引。 - 大文件处理
使用 --gzip 压缩可减少传输体积,处理大型数据时建议分片操作。 - 认证与权限
确保用户对目标数据库有 readWrite 权限,使用 --authenticationDatabase 指定认证库。
四、示例场景
案例1:导出 users 集合到 JSON
bash
mongoexport --db mydb --collection users --out users.json
案例2:从 CSV 恢复数据到新集合
bash
mongoimport --db mydb --collection new_users --type csv --headerline --file users.csv
案例3:全库备份与恢复
bash
# 备份
mongodump --db mydb --out /backup/20231001
# 恢复
mongorestore --db mydb_restored /backup/20231001/mydb