导出导入工具mongoexport、mongoimport

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=<类型> 输出格式:jsoncsv
-o, --out=<文件名> 输出文件;如未指定,则输出到标准输出
--jsonArray 输出为 JSON 数组格式,而不是每行一个对象
--pretty 输出格式化的 JSON,便于人工阅读
--noHeaderLine 导出 CSV 数据时不包含第一行的字段名列表
--jsonFormat=<类型> 输出的扩展 JSON 格式:canonicalrelaxed(默认:'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=<宽容模式> 控制类型强制转换失败时的行为:autoCastskipFieldskipRowstop(默认:stop)
--type=<类型> 导入的输入格式:jsoncsvtsv
--columnsHaveTypes 表示字段列表(来自 --fields--fieldsFile--headerline)指定了类型;格式必须为:<列名>.<类型>(<参数>)。类型可以是:autobinarybooleandatedate_godate_msdate_oracledecimaldoubleint32int64string。对于每个日期类型,参数是日期时间格式字符串。对于二进制类型,参数可以是:base32base64hex。所有其他类型使用空参数。仅对 CSV 和 TSV 导入有效。例如:zipcode.string(), thumbnail.binary(base64)
--legacy 使用传统的扩展 JSON 格式
--useArrayIndexFields 表示字段名可能包含数组索引,应在导入期间用于构建数组(例如:foo.0foo.1)。索引必须从 0 开始并顺序增加(foo.1foo.0 会失败)
导入选项 --drop 在插入文档之前删除集合
--ignoreBlanks 忽略 CSV 和 TSV 中值为空的字段
--maintainInsertionOrder 按文档在输入源中出现的顺序插入文档。默认情况下,插入将以任意顺序执行。设置此标志还会启用 --stopOnError 的行为,并将 NumInsertionWorkers 限制为 1
-j, --numInsertionWorkers=<数量> 并发运行的插入操作数量
--stopOnError 在导入期间遇到任何错误时停止。默认情况下,mongoimport 会尝试继续处理文档验证和 DuplicateKey 错误,但启用此选项后,工具将停止。即使启用此选项,在遇到错误后仍可能插入少量文档;使用 --maintainInsertionOrder 可在错误后立即停止
`--mode=[insert upsert
--upsertFields=<字段>[,<字段>] --mode 设置为 upsertmerge 时,用于查询部分的逗号分隔字段
--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
相关推荐
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-考试系统DDD(领域驱动设计)实现步骤详解
java·数据库·人工智能·spring boot
workflower2 小时前
软件需求规约的质量属性
java·开发语言·数据库·测试用例·需求分析·结对编程
橘子133 小时前
MySQL库的操作(二)
数据库·mysql·oracle
todoitbo3 小时前
多模数据库技术解析:以KingbaseES MongoDB兼容版为例
数据库·mongodb·kingbasees·金仓数据库
正在走向自律3 小时前
ksycopg2实战:Python连接KingbaseES数据库的完整指南
数据库·python·国产数据库·kingbase·kingbasees·数据库平替用金仓·ksycopg2
廋到被风吹走3 小时前
【数据库】【MongoDB】全栈深度指南:文档模型到分布式集群
数据库·分布式·mongodb
20年编程老鸟java+ai全栈3 小时前
零基础搞定开发环境:PHP + Node.js + MongoDB + Python 一键安装全攻略
python·mongodb·node.js·php
·云扬·3 小时前
MySQL各版本核心特性演进与主流分支深度解析
数据库·sql·mysql
砚边数影3 小时前
AI开发依赖引入:DL4J / Java-ML 框架 Maven 坐标配置
java·数据库·人工智能·深度学习·机器学习·ai·maven