MongoDB Academy · 课时

mongoexport:将集合导出到文件

您将使用 mongoexport 将集合导出为 JSON 或 CSV 格式,选择特定字段并应用筛选条件。

第 2 / 4 课13 个步骤

mongoexport:将集合导出到文件 是 CoddyKit 上的免费 MongoDB Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 MongoDB Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 MongoDB Academy 课程共包含 4 节课。

什么是 mongoexport

mongoexport 是 MongoDB Database Tools 提供的命令行工具,用于从集合中读取文档并将其写入文件。它可以输出JSON(JSONL 格式,每行一个文档)或CSV 格式。常见用途包括创建用于分析的数据备份、将数据迁移到其他系统、共享用于调试的快照,或使用生产环境样本为其他环境填充初始数据。

基本 JSON 导出

最简单的导出命令需要指定源数据库、集合和输出文件。默认情况下,mongoexport 会写出 JSONL——每行一个 JSON 文档——这非常适合流式导出大量数据,以及使用 mongoimport 重新导入。使用 --out 指定输出文件名;如果不使用该选项,文档会输出到标准输出。

# Export the 'products' collection to JSONL
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection products \
  --out products_export.json

# Each line in the output file is one document:
# {"_id":{"$oid":"..."},"name":"Widget","price":9.99}
# {"_id":{"$oid":"..."},"name":"Gadget","price":19.99}

导出为 CSV 格式

使用 --type csv 将数据导出为逗号分隔值格式。CSV 导出要求您使用 --fields 列出要包含的字段——mongoexport 无法自动从模式灵活的集合中推断出所有字段。CSV 输出的第一行包含列标题,与您指定的字段相对应。

# Export selected fields as CSV
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection products \
  --type csv \
  --fields 'name,price,category,rating' \
  --out products_export.csv

# Output:
# name,price,category,rating
# Widget,9.99,tools,4.5
# Gadget,19.99,electronics,4.2

筛选要导出的文档

将 --query 选项与 JSON 筛选文档结合使用,只导出符合条件的文档,而不是导出整个集合。这对于提取数据子集非常有用,例如提取某个月的所有订单,或具有特定角色的所有用户,同时避免导出不需要的数据。

# Export only shipped orders from January 2024
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection orders \
  --query '{"status":"shipped","createdAt":{"$gte":{"$date":"2024-01-01T00:00:00Z"},"$lt":{"$date":"2024-02-01T00:00:00Z"}}}' \
  --out january_orders.json

选择要导出的字段

使用 --fields(或 -f)以及以逗号分隔的字段名列表,指定要包含在输出中的字段。未列出的字段会被排除。这相当于 find 查询中的包含投影。结合使用 --query,您可以精确导出所需的数据切片,减小文件大小,并且只共享相关字段。

# Export only name, email, and createdAt for active users
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection users \
  --query '{"isActive":true}' \
  --fields 'name,email,createdAt' \
  --out active_users.json

# Sensitive fields like passwordHash are automatically excluded

对导出结果排序

将 --sort 与 JSON 排序文档结合使用,可以按特定顺序导出文档。当下游处理需要按照顺序读取输出文件时,这非常有用。例如,按时间顺序导出事件以便重放,或按字母顺序导出用户以生成报告。

# Export events in chronological order
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection events \
  --sort '{"timestamp":1}' \
  --out events_sorted.json

限制导出数量

使用 --limit 最多导出 N 个文档,使用 --skip 跳过前 N 个文档。这些选项可以帮助您导出样本,例如最近的 1,000 个订单;也可以通过使用跳过偏移量反复调用命令,对集合进行分页来分批导出。请与 --sort 一起使用,以确保限制数量具有明确意义。

# Export the 100 most recently created products (sample for testing)
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection products \
  --sort '{"createdAt":-1}' \
  --limit 100 \
  --out products_sample.json

扩展 JSON 与宽松模式

mongoexport 默认输出扩展 JSON,使用特殊的包装对象来表示 JSON 原生不支持的 BSON 类型,例如使用 {"$oid":"..."} 表示 ObjectId,使用 {"$date":"..."} 表示日期。使用 --relaxed 可以输出宽松的扩展 JSON,此时日期会变为 ISO 字符串,数字会变为普通 JSON 数字——可读性更好,但重新导入时会损失部分类型信息。

# Default (Canonical Extended JSON)
# {"_id":{"$oid":"65a..."},"price":{"$numberDecimal":"9.99"}}

# Relaxed Extended JSON — more human-readable
mongoimport \
  --uri 'mongodb://localhost:27017/myapp' \
  --collection products \
  --relaxed \
  --out products_relaxed.json
# {"_id":"65a...","price":9.99}

从 MongoDB Atlas 导出

在 --uri 选项中使用 Atlas 集群的 SRV 连接字符串,即可从 Atlas 集群导出数据。Atlas 要求使用 TLS(SRV URI 会自动启用 TLS)。对于非常大的 Atlas 集合,建议使用 Atlas UI 中的“Export Collection”按钮,或使用 Atlas Data Federation 将分析数据导出到 S3 或其他数据湖。

# Export from Atlas cluster
MONGO_URI='mongodb+srv://user:password@cluster0.abc.mongodb.net/myapp'

mongoimport \
  --uri "$MONGO_URI" \
  --collection orders \
  --query '{"status":"completed"}' \
  --out completed_orders.json

mongoexport 与 mongodump

请根据使用场景选择合适的工具:

  • mongoexport:输出人类可读的 JSON 或 CSV;适合数据共享、分析或选择性迁移;支持筛选和投影
  • mongodump:输出二进制 BSON;适合完整的集合或数据库备份;速度更快,并且可以无损保留所有 BSON 类型;不可直接供人阅读
对于备份,建议使用 mongodump。对于数据共享或选择性导出,请使用 mongoexport。

将导出结果通过管道传递给其他命令

不使用 --out 选项时,mongoexport 会将结果输出到标准输出,从而可以组合 Unix 管道。您可以将输出传递给 wc -l 来统计文档数量,传递给 grep 来筛选行,传递给 jq 来处理 JSON,也可以传递给其他任意命令。这使得 mongoexport 成为数据处理脚本中灵活的组成部分。

# Count documents exported
mongoimport --uri '...' --collection products | wc -l

# Pipe to jq to extract just product names
mongoimport --uri '...' --collection products | jq -r '.name'

# Compress while exporting
mongoimport --uri '...' --collection products | gzip > products.json.gz

快速检查

测试您对本课 MongoDB 和 NoSQL 数据库相关概念的理解。

课程回顾

本课您学到了:mongoexport 可以从集合中输出 JSONL 或 CSV,并支持可选的筛选、字段选择和排序,--query 可以导出指定的文档子集,以及完整备份应优先使用 mongodump,而选择性、人类可读的导出更适合使用 mongoexport。接下来我们将学习使用 mongodump 和 mongorestore 创建完整的二进制数据库备份。

免费开始

用 AI 导师学习 JavaScript — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「mongoexport:将集合导出到文件」课时是免费的吗?

是的 — 「mongoexport:将集合导出到文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 MongoDB Academy 课程的其余内容,请升级到 CoddyKit PRO。 MongoDB Academy 课程共包含 4 节课。

「mongoexport:将集合导出到文件」这节课中我会学到什么?

您将使用 mongoexport 将集合导出为 JSON 或 CSV 格式,选择特定字段并应用筛选条件。 你通过在浏览器中直接运行的动手代码来练习 MongoDB Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 MongoDB Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 MongoDB Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「mongoexport:将集合导出到文件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 MongoDB Academy 课中编写并运行代码吗?

能。每节 MongoDB Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. mongoimport:加载 JSON 和 CSV 文件
  2. mongoexport:将集合导出到文件
  3. 使用 mongodump 和 mongorestore 完成完整备份
  4. 使用 Node.js 脚本填充数据
← 返回 MongoDB Academy