导入 MongoDB 数据

MongoDBMongoDBBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 JSON 和 CSV 格式将数据导入 MongoDB。第一步涵盖导入 JSON 文件,你将创建一个示例 JSON 文件,并使用 mongoimport 命令将其导入 MongoDB 数据库。第二步重点介绍导入 CSV 数据,指导你创建 CSV 文件并使用 mongoimport 命令将其加载到 MongoDB 中。实验还包括检查导入结果、处理任何错误以及验证导入数据的步骤,确保你对 MongoDB 导入过程有全面的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/DataImportExportGroup(["Data Import Export"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/ErrorHandlingGroup(["Error Handling"]) mongodb/BasicOperationsGroup -.-> mongodb/start_mongodb_shell("Start MongoDB Shell") mongodb/BasicOperationsGroup -.-> mongodb/create_database_collection("Create Database and Collection") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/ErrorHandlingGroup -.-> mongodb/handle_write_errors("Handle Write Errors") mongodb/DataImportExportGroup -.-> mongodb/import_data_json("Import Data from JSON") mongodb/DataImportExportGroup -.-> mongodb/import_data_csv("Import Data from CSV") subgraph Lab Skills mongodb/start_mongodb_shell -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/create_database_collection -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/find_documents -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/query_with_conditions -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/handle_write_errors -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/import_data_json -.-> lab-422086{{"导入 MongoDB 数据"}} mongodb/import_data_csv -.-> lab-422086{{"导入 MongoDB 数据"}} end

导入 JSON 文件

在这一步中,你将学习如何使用 mongoimport 命令将 JSON 文件导入 MongoDB。JSON(JavaScript Object Notation)是一种流行的数据交换格式,MongoDB 可以轻松导入。

首先,让我们创建一个包含一些数据的示例 JSON 文件。我们将使用一个简单的书籍数据集。

打开终端并导航到项目目录:

cd ~/project

使用 nano 创建一个名为 books.json 的文件:

nano books.json

添加以下 JSON 内容:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Python Programming",
    "author": "John Doe",
    "year": 2022
  },
  {
    "title": "Data Science Handbook",
    "author": "Alice Johnson",
    "year": 2021
  }
]

Ctrl+X,然后按 YEnter 保存文件。

现在,启动 MongoDB shell:

mongosh

创建一个新数据库并切换到该数据库:

use library_database

退出 MongoDB shell:

exit

将 JSON 文件导入到 books 集合中:

mongoimport --db library_database --collection books --file ~/project/books.json --jsonArray

示例输出:

[#######......] 2/3 documents
2023-xx-xx 00:00:00.000 [############] library_database.books 3/3 documents

让我们使用 mongosh 来验证导入结果,统计文档数量:

mongosh library_database --eval "db.books.countDocuments()"

示例输出:

3

导入 CSV 数据

在这一步中,你将学习如何使用 mongoimport 命令将 CSV(逗号分隔值)文件导入 MongoDB。CSV 是一种常见的存储表格数据的格式。

首先,让我们创建一个包含图书馆会员数据的示例 CSV 文件。

导航到项目目录:

cd ~/project

使用 nano 创建一个名为 library_members.csv 的文件:

nano library_members.csv

添加以下 CSV 内容:

name,age,membership_type,join_date
John Doe,35,Premium,2023-01-15
Jane Smith,28,Standard,2022-11-20
Alice Johnson,42,Gold,2021-06-10
Bob Williams,55,Premium,2022-03-05

Ctrl+X,然后按 YEnter 保存文件。

启动 MongoDB shell:

mongosh

创建一个新数据库并切换到该数据库:

use library_database

退出 MongoDB shell:

exit

将 CSV 文件导入到 members 集合中:

mongoimport --db library_database --collection members --type csv --file ~/project/library_members.csv --headerline

--headerline 标志告诉 MongoDB 使用 CSV 的第一行作为字段名称。

示例输出:

[#######......] 2/4 documents
2023-xx-xx 00:00:00.000 [############] library_database.members 4/4 documents

让我们使用 mongosh 来验证导入结果,统计文档数量并查看前几条记录:

mongosh library_database --eval "db.members.countDocuments()"

示例输出:

4

现在,查看导入的文档:

mongosh library_database --eval "db.members.find().limit(2)"

示例输出:

[
  {
    _id: ObjectId("..."),
    name: 'John Doe',
    age: 35,
    membership_type: 'Premium',
    join_date: '2023-01-15'
  },
  {
    _id: ObjectId("..."),
    name: 'Jane Smith',
    age: 28,
    membership_type: 'Standard',
    join_date: '2022-11-20'
  }
]

检查导入结果

在这一步中,你将学习如何验证和探索已导入 MongoDB 的数据。我们将使用各种 MongoDB 命令来检查导入的集合及其内容。

启动 MongoDB shell:

mongosh library_database

首先,列出数据库中的所有集合:

show collections

示例输出:

books
members

现在,让我们更详细地探索数据。我们将使用不同的方法来检查和查询导入的集合。

统计每个集合中的文档数量:

db.books.countDocuments()
db.members.countDocuments()

示例输出:

3
4

使用查询过滤器查找特定文档:

// 查找 2022 年后出版的书籍
db.books.find({ year: { $gt: 2022 } })

示例输出:

[
  {
    _id: ObjectId("..."),
    title: 'MongoDB Basics',
    author: 'Jane Smith',
    year: 2023
  }
]

现在,查询具有特定会员类型的会员:

// 查找 Premium 会员
db.members.find({ membership_type: "Premium" })

示例输出:

[
  {
    _id: ObjectId("..."),
    name: 'John Doe',
    age: 35,
    membership_type: 'Premium',
    join_date: '2023-01-15'
  },
  {
    _id: ObjectId("..."),
    name: 'Bob Williams',
    age: 55,
    membership_type: 'Premium',
    join_date: '2022-03-05'
  }
]

导出集合以验证其内容:

exit

使用 mongoexport 将 members 集合导出为 JSON 文件:

mongoexport --db library_database --collection members --out ~/project/exported_members.json

查看导出的文件:

cat ~/project/exported_members.json

这使你可以验证 MongoDB 外部的导入数据。

处理导入错误

在这一步中,你将学习如何处理使用 MongoDB 和 mongoimport 时常见的导入错误。理解这些错误将帮助你排查数据导入问题。

首先,让我们创建一个包含一些导入挑战的示例文件:

cd ~/project

创建一个故意包含问题的 CSV 文件:

nano problematic_members.csv

添加以下内容:

name,age,membership_type,join_date
John Doe,thirty-five,Premium,2023-01-15
Jane Smith,28,Standard,invalid-date
Alice Johnson,42,Gold,2021-06-10

注意以下故意引入的错误:

  • "thirty-five" 不是一个有效的数字
  • "invalid-date" 不是一个正确的日期格式

尝试导入此文件:

mongoimport --db library_database --collection problematic_members --type csv --file ~/project/problematic_members.csv --headerline

你可能会看到类似以下的错误信息:

2024-xx-xx 00:00:00.000 [#######] Failed: document validation error

为了处理此类错误,使用 --stopOnError--jsonArray 标志:

mongoimport --db library_database --collection problematic_members --type csv --file ~/project/problematic_members.csv --headerline --stopOnError

创建一个干净的版本文件:

nano clean_members.csv

添加修正后的内容:

name,age,membership_type,join_date
John Doe,35,Premium,2023-01-15
Jane Smith,28,Standard,2022-11-20
Alice Johnson,42,Gold,2021-06-10

现在使用验证导入:

mongoimport --db library_database --collection clean_members --type csv --file ~/project/clean_members.csv --headerline

验证导入结果:

mongosh library_database --eval "db.clean_members.find()"

让我们演示另一个常见错误——不正确的 JSON 格式:

nano invalid_books.json

添加一个故意格式错误的 JSON:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Incomplete Book"
    // 缺少逗号和闭合括号
  }
]

尝试导入此文件:

mongoimport --db library_database --collection invalid_books --file ~/project/invalid_books.json --jsonArray

你会看到一个关于 JSON 解析的错误。

创建一个有效的 JSON 文件:

nano valid_books.json

添加正确的 JSON:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Complete Book",
    "author": "John Doe",
    "year": 2022
  }
]

导入有效的 JSON:

mongoimport --db library_database --collection valid_books --file ~/project/valid_books.json --jsonArray

验证导入数据

在这最后一步中,你将学习如何使用各种技术和工具彻底验证和校验已导入 MongoDB 的数据。

启动 MongoDB shell:

mongosh library_database

首先,执行全面的数据验证:

// 检查集合总数
show collections

示例输出:

books
members
clean_members
valid_books

统计每个集合中的文档数量:

db.books.countDocuments()
db.members.countDocuments()
db.clean_members.countDocuments()
db.valid_books.countDocuments()

执行高级查询以验证数据完整性:

// 查找 2022 年后出版的书籍
db.books.find({ year: { $gt: 2022 } })

// 查找年龄大于 30 的会员
db.members.find({ age: { $gt: 30 } })

退出 MongoDB shell:

exit

使用 mongoexport 导出集合以进行外部验证:

## 导出 books 集合
mongoexport --db library_database --collection books --out ~/project/exported_books.json

## 导出 members 集合
mongoexport --db library_database --collection members --out ~/project/exported_members.json

验证导出的文件:

## 检查导出的 books 文件
head -n 5 ~/project/exported_books.json

## 检查导出的 members 文件
head -n 5 ~/project/exported_members.json

执行数据一致性检查:

## 比较集合大小
wc -l ~/project/exported_books.json
wc -l ~/project/exported_members.json

可选:使用 jq 进行 JSON 验证:

## 如果未安装 jq,则安装
sudo apt-get update
sudo apt-get install -y jq

## 验证 JSON 结构
jq '.' ~/project/exported_books.json
jq '.' ~/project/exported_members.json

让我们创建一个简单的验证脚本:

nano ~/project/verify_import.sh

添加以下内容:

#!/bin/bash

## 验证 MongoDB 导入
echo "检查 MongoDB 集合:"
mongosh library_database --quiet --eval "
    print('Books 数量: ' + db.books.countDocuments());
    print('Members 数量: ' + db.members.countDocuments());
    print('Clean Members 数量: ' + db.clean_members.countDocuments());
    print('Valid Books 数量: ' + db.valid_books.countDocuments());
"

使脚本可执行:

chmod +x ~/project/verify_import.sh

运行验证脚本:

~/project/verify_import.sh

总结

在本实验中,你学习了如何使用 mongoimport 命令将 JSON 和 CSV 数据导入 MongoDB。对于 JSON 文件,你创建了一个示例 books.json 文件,将其导入 library_database 数据库,并通过统计文档数量验证了导入结果。对于 CSV 数据,你创建了一个 library_members.csv 文件,将其导入同一数据库,并检查了导入结果。你还学习了如何处理导入错误以及验证导入的数据。