介绍
在本实验中,你将学习如何使用 JSON 和 CSV 格式将数据导入 MongoDB。第一步涵盖导入 JSON 文件,你将创建一个示例 JSON 文件,并使用 mongoimport
命令将其导入 MongoDB 数据库。第二步重点介绍导入 CSV 数据,指导你创建 CSV 文件并使用 mongoimport
命令将其加载到 MongoDB 中。实验还包括检查导入结果、处理任何错误以及验证导入数据的步骤,确保你对 MongoDB 导入过程有全面的理解。
在本实验中,你将学习如何使用 JSON 和 CSV 格式将数据导入 MongoDB。第一步涵盖导入 JSON 文件,你将创建一个示例 JSON 文件,并使用 mongoimport
命令将其导入 MongoDB 数据库。第二步重点介绍导入 CSV 数据,指导你创建 CSV 文件并使用 mongoimport
命令将其加载到 MongoDB 中。实验还包括检查导入结果、处理任何错误以及验证导入数据的步骤,确保你对 MongoDB 导入过程有全面的理解。
在这一步中,你将学习如何使用 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
,然后按 Y
和 Enter
保存文件。
现在,启动 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
在这一步中,你将学习如何使用 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
,然后按 Y
和 Enter
保存文件。
启动 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
注意以下故意引入的错误:
尝试导入此文件:
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
文件,将其导入同一数据库,并检查了导入结果。你还学习了如何处理导入错误以及验证导入的数据。