1.导出工具mongoexport
1.1 常用选项说明
| 选项类别 | 选项和缩写 | 说明 |
|---|---|---|
| 常规选项 | --help |
打印使用说明 |
--version |
打印工具版本并退出 | |
--config |
配置文件路径 | |
| 详细程度选项 | -v, --verbose=<级别> |
更详细的日志输出(可多次使用以增加详细程度,如 -vvvvv,或指定数值,如 --verbose=N) |
--quiet |
隐藏所有日志输出 | |
| 连接选项 | -h, --host=<主机名> |
要连接的 MongoDB 主机(副本集格式:setname/host1,host2) |
--port=<端口> |
服务器端口(也可使用 --host 主机名:端口 格式) |
|
| 认证选项 | -u, --username=<用户名> |
认证用户名 |
-p, --password=<密码> |
认证密码 | |
--authenticationDatabase=<数据库名> |
包含用户凭证的数据库 | |
--authenticationMechanism=<机制> |
使用的认证机制 | |
--awsSessionToken=<aws会话令牌> |
通过 AWS IAM 认证的会话令牌 | |
| 命名空间选项 | -d, --db=<数据库名> |
要使用的数据库 |
-c, --collection=<集合名> |
要使用的集合 | |
| URI选项 | --uri=mongodb-uri |
MongoDB URI 连接字符串 |
| 输出选项 | -f, --fields=<字段>[,<字段>] |
逗号分隔的字段名列表(导出 CSV 时必须)例如:-f "姓名,年龄" |
--fieldFile=<文件名> |
包含字段名的文件 - 每行一个字段 | |
--type=<类型> |
输出格式:json 或 csv |
|
-o, --out=<文件名> |
输出文件;如未指定,则输出到标准输出 | |
--jsonArray |
输出为 JSON 数组格式,而不是每行一个对象 | |
--pretty |
输出格式化的 JSON,便于人工阅读 | |
--noHeaderLine |
导出 CSV 数据时不包含第一行的字段名列表 | |
--jsonFormat=<类型> |
输出的扩展 JSON 格式:canonical 或 relaxed(默认:'relaxed') |
|
| 查询选项 | -q, --query=<json> |
查询过滤器,JSON 字符串格式,例如:'{x:{$gt:1}}' |
--queryFile=<文件名> |
包含查询过滤器(JSON)的文件路径 | |
| `--readPreference=<字符串> | ` | |
--forceTableScan |
强制表扫描(不使用 $snapshot 或 _id 提示)。已弃用,因为这是 WiredTiger 的默认行为 |
|
--skip=<数量> |
跳过的文档数量 | |
--limit=<数量> |
限制导出的文档数量 | |
--sort=<json> |
排序规则,JSON 字符串格式,例如:'{x:1}' |
|
--assertExists |
如果指定,当集合不存在时导出失败 |
1.2 例子
json
# 基础导出
mongoexport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin -d mydb -c users --type=json --out /data/backup/users.json
# 使用 URI 连接
mongoexport --uri "mongodb://user:password@localhost:27017/mydb" --collection users --out /data/backup/users.json
# 导出指定字段
mongoexport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin --db mydb --collection users --fields name,email,age --type csv --out /data/backup/users.csv
# 导出带查询条件的数据
mongoexport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin --db mydb --collection orders --query '{"status": "completed", "total": {"$gt": 100}}' --type=json --out /data/backup/completed_orders.json
# 限制数量并排序
mongoexport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin--db mydb --collection logs --limit 1000 --sort '{"timestamp": -1}' --type=json --out /data/backup/recent_logs.json
# 压缩输出
mongoexport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin --db mydb --collection data --type=json --out /data/backup/data.json.gz --gzip


2.导入工具mongoimport
2.1选项说明
| 选项类别 | 选项和缩写 | 说明 |
|---|---|---|
| 常规选项 | --help |
打印使用说明 |
--version |
打印工具版本并退出 | |
--config= |
配置文件路径 | |
| 详细程度选项 | -v, --verbose=<级别> |
更详细的日志输出(可多次使用以增加详细程度,如 -vvvvv,或指定数值,如 --verbose=N) |
--quiet |
隐藏所有日志输出 | |
| 连接选项 | -h, --host=<主机名> |
要连接的 MongoDB 主机(副本集格式:setname/host1,host2) |
--port=<端口> |
服务器端口(也可使用 --host 主机名:端口 格式) |
|
| 认证选项 | -u, --username=<用户名> |
认证用户名 |
-p, --password=<密码> |
认证密码 | |
--authenticationDatabase=<数据库名> |
包含用户凭证的数据库 | |
--authenticationMechanism=<机制> |
使用的认证机制 | |
--awsSessionToken=<aws会话令牌> |
通过 AWS IAM 认证的会话令牌 | |
| 命名空间选项 | -d, --db=<数据库名> |
要使用的数据库 |
-c, --collection=<集合名> |
要使用的集合 | |
| URI选项 | --uri=mongodb-uri |
MongoDB URI 连接字符串 |
| 输入选项 | -f, --fields=<字段>[,<字段>]* |
逗号分隔的字段列表,例如:-f 姓名,年龄 |
--fieldFile=<文件名> |
包含字段名的文件 - 每行一个字段 | |
--file=<文件名> |
要导入的文件;如未指定,则使用标准输入 | |
--headerline |
使用输入源的第一行作为字段列表(仅限 CSV 和 TSV) | |
--jsonArray |
将输入源视为 JSON 数组 | |
--parseGrace=<宽容模式> |
控制类型强制转换失败时的行为:autoCast、skipField、skipRow、stop(默认:stop) |
|
--type=<类型> |
导入的输入格式:json、csv 或 tsv |
|
--columnsHaveTypes |
表示字段列表(来自 --fields、--fieldsFile 或 --headerline)指定了类型;格式必须为:<列名>.<类型>(<参数>)。类型可以是:auto、binary、boolean、date、date_go、date_ms、date_oracle、decimal、double、int32、int64、string。对于每个日期类型,参数是日期时间格式字符串。对于二进制类型,参数可以是:base32、base64、hex。所有其他类型使用空参数。仅对 CSV 和 TSV 导入有效。例如:zipcode.string(), thumbnail.binary(base64) |
|
--legacy |
使用传统的扩展 JSON 格式 | |
--useArrayIndexFields |
表示字段名可能包含数组索引,应在导入期间用于构建数组(例如:foo.0、foo.1)。索引必须从 0 开始并顺序增加(foo.1、foo.0 会失败) |
|
| 导入选项 | --drop |
在插入文档之前删除集合 |
--ignoreBlanks |
忽略 CSV 和 TSV 中值为空的字段 | |
--maintainInsertionOrder |
按文档在输入源中出现的顺序插入文档。默认情况下,插入将以任意顺序执行。设置此标志还会启用 --stopOnError 的行为,并将 NumInsertionWorkers 限制为 1 |
|
-j, --numInsertionWorkers=<数量> |
并发运行的插入操作数量 | |
--stopOnError |
在导入期间遇到任何错误时停止。默认情况下,mongoimport 会尝试继续处理文档验证和 DuplicateKey 错误,但启用此选项后,工具将停止。即使启用此选项,在遇到错误后仍可能插入少量文档;使用 --maintainInsertionOrder 可在错误后立即停止 |
|
| `--mode=[insert | upsert | |
--upsertFields=<字段>[,<字段>] |
当 --mode 设置为 upsert 或 merge 时,用于查询部分的逗号分隔字段 |
|
--writeConcern=<写入关注规范> |
写入关注选项,例如:--writeConcern majority,--writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}' |
|
--bypassDocumentValidation |
绕过文档验证 |
2.2 例子
json
# 基本json导入
mongoimport --db=mydb --collection=users --file=users.json
# 指定主机和端口
mongoimport -h127.0.0.1 -uroot -p123 --port 27017 --authenticationDatabase admin --db=mydb --collection=users --file=users.json
# 使用URI连接
mongoimport --uri="mongodb://username:password@localhost:27017/mydb" --collection=users --file=users.json
# 基本CSV导入
mongoimport --db=mydb --collection=products --type=csv --file=products.csv
# CSV带标题行
mongoimport --db=mydb --collection=products --type=csv --headerline --file=products.csv
# 指定CSV字段
mongoimport --db=mydb --collection=products --type=csv --fields=name,price,category --file=products.csv
2.1.1 恢复json文件
bash
[mongodb@mongodb-01 ~]$ mongoimport -uroot -p123 --port 27017 --authenticationDatabase admin -d test -c comment /tmp/test_comment.json
恢复时原表中不能有数据,否则会报错

清空原表中数据后,导入成功(或者添加--drop参数)

2.1.2 恢复csv格式文件
bash
(1)csv格式的文件,首行有列名
mongoimport -uroot -p123 --port 27017 --authenticationDatabase admin -d test -c comment --type=csv --headerline --file /tmp/test_comment.csv
#注:--headerline:指明第一行是列名,不需要导入。

bash
(2)csv格式的文件,首行无列名
#需要使用-f参数指定列名
mongoimport -uroot -p123 --port 27017 --authenticationDatabase admin -d test -c comment --type=csv -f _id,articleid,content,userid,nickname,createdatetime,likenum,state --file /tmp/test_comment.cs
