在MongoDB中处理JSON
MongoDB是一个高性能、面向文档的NoSQL数据库,于2000年中期出现在人们面前。与基于SQL的数据库不同,MongoDB使用文档(记录)和集合(表)来存储非关系型数据。
由于MongoDB的可扩展性和易用性,它的使用范围越来越广。
JavaScript Object Notation(JSON)是一种完全基于JavaScript的数据交换格式。由于JSON对象与大多数系统兼容,它可以很容易地从一个系统转移到另一个系统。
JSON除了独立于任何语言之外,还很简单和容易使用。由于这些原因,JSON在编程和数据表示方面有广泛的应用。
JSON可以存储各种数据类型,如字符串、数组、对象和二进制JSON(BSON)。使得访问数据变得容易的是它有一套在系统之间输出和输入JSON文档的各种工具。JSON使用键值对符号,被认为是数据的基本单位。
目标
本文的目的是让大家清楚地了解如何在MongoDB中处理JSON数据。在文章结束时,读者应该能够在MongoDB中结构、导入-导出和保存JSON数据。
前提条件
- 使用MongoDB的一般知识。
- 对JavaScript对象符号(JSON)有基本了解。
- 在你的机器上安装MongoDB。
为MongoDB数据库中使用的JSON数据构建结构
假设我们想在MongoDB中存储一个博客页面的数据。首先,我们需要对数据的外观以及不同字段之间的关系有一个概念。
例如,我们假设这是我们想要捕获的记录。
| 帖子ID | 帖子标题 | 帖子正文 | 帖子类别 | 帖子作者 | 发帖日期 |
|---|---|---|---|---|---|
| 1 | 帖子一 | 一个令人敬畏的帖子 1 | 编程, 编码, 国家 | John Doe | 24, 08, 2020 |
| 2 | 帖子二 | JSON数据类型 | 数据库, 编码, 编程 | 简-多伊 | 01, 01, 2021 |
| 3 | 发表三篇 | REST API教程 | APIs, 数据传输, JavaScript | Jim Doe | 08, 06, 2021 |
进入JSON
让我们用JSON格式来构造上面的表格,记住JSON的格式是名称或键对值。字段名和值用冒号分开,文件名-值对用逗号分开,一组记录用大括号括起来。
比如说。
{
"post id": 1, "post title": " post one"
}
嵌入数据的建模
让我们访问一下SQL,在这种数据的情况下,有些数据字段需要多个值,如果用单列建模,可能不容易显示,例如post category 。在SQL中,我们会通过创建一个关系表来解决这个问题。
使用MongoDB,这个问题可以通过使用JSON嵌入数据轻松解决,因为它支持嵌入文件。它可以在同一个文件中嵌入相关数据和列表,而不是创建一个新的表,如下图所示。
{
"post category": ["Programming", "Coding", "States"]
}
对于帖子日期的情况,每个日期都有日、月、年的值,下面是如何去做的。
{
"post date": {
"day": 24, "month": 08, "year": 2020
}
}
我们只是把我们的JSON数据结构化,以便在MongoDB中使用。让我们进入下一个步骤。
创建JSON文件
首先,我们需要有我们的JSON文件,我们将把它导入到MongoDB数据库中。因此,我们将创建一个名为project 的新文件夹。在这个文件夹中,创建一个新文件,并将其命名为file.json ,然后将下面片段中的代码粘贴到该文件中。
[
{
"student_number": 1,
"name": "John Doe",
"age": 17,
"Course": "Computer Science"
},
{
"student_number": 2,
"name": "Joan Dee",
"age": 23,
"Course": "Computer Animation"
},
{
"student_number": 3,
"name": "Jim Doeh",
"age": 19,
"Course": "Industrial Science"
},
{
"student_number": 4,
"name": "John Dohn",
"age": 37,
"Course": "Political Science"
}
]
导入JSON到MongoDB
接下来,你需要创建一个数据库来保存你要导入的JSON对象。执行下面的命令,创建数据库并将JSON文件作为student 集合导入。
mongoimport --jsonArray --db studentinfo --collection students --file path-to-your-file\filename.json
如果你的导入是成功的,你应该在终端得到下面的信息。
2021-06-29T22:35:18.454+0300 connected to: mongodb://localhost/
2021-06-29T22:35:18.500+0300 4 document(s) imported successfully. 0 document(s) failed to import.
现在为了验证导入,运行下面的命令来查看导入的数据。
db.students.find()
这个命令应该从导入的JSON文件中获取所有对象,如下图所示。
db.students.find()
{ "_id" : ObjectId("60db758c4a433597bcae61c0"), "student_number" : 1, "name" : "John Doe", "age" : 17, "Course" : "Computer Science" }
{ "_id" : ObjectId("60db758c4a433597bcae61c1"), "student_number" : 4, "name" : "John Dohn", "age" : 37, "Course" : "Political Science" }
{ "_id" : ObjectId("60db758c4a433597bcae61c2"), "student_number" : 2, "name" : "Joan Dee", "age" : 23, "Course" : "Computer Animation" }
{ "_id" : ObjectId("60db758c4a433597bcae61c3"), "student_number" : 3, "name" : "Jim Doeh", "age" : 19, "Course" : "Industrial Science" }
保存JSON数据到MongoDB数据库
现在我们已经将JSON文件导入MongoDB,我们将向数据库添加两条记录,然后将数据导出到一个新的JSON文件。
使用下面的命令向数据库添加记录。
db.students.insert({"student_number":5, "name":"Last student added", "age":22, "Course":"Engineering"})
你应该在终端中得到下面的响应。
WriteResult({ "nInserted" : 1 })
现在,如果我们运行该命令,我们发现数据库中多了一条记录。
db.students.find()
{ "_id" : ObjectId("60db758c4a433597bcae61c0"), "student_number" : 1, "name" : "John Doe", "age" : 17, "Course" : "Computer Science" }
{ "_id" : ObjectId("60db758c4a433597bcae61c1"), "student_number" : 4, "name" : "John Dohn", "age" : 37, "Course" : "Political Science" }
{ "_id" : ObjectId("60db758c4a433597bcae61c2"), "student_number" : 2, "name" : "Joan Dee", "age" : 23, "Course" : "Computer Animation" }
{ "_id" : ObjectId("60db758c4a433597bcae61c3"), "student_number" : 3, "name" : "Jim Doeh", "age" : 19, "Course" : "Industrial Science" }
{ "_id" : ObjectId("60db7a59ee65088f9b51677e"), "student_number" : 5, "name" : "Last student added", "age" : 22, "Course" : "Engineering" }
导出JSON到MongoDB数据库
现在让我们使用下面的命令将新文件导出为JSON。
mongoexport --db studentinfo --collection student --out d:\out.json --pretty
你应该在你的终端中看到下面的响应。
2021-06-29T23:02:50.046+0300 connected to: mongodb://localhost/
2021-06-29T23:02:50.071+0300 exported 4 records
现在,如果你导航到你的D盘,你应该发现你导出的JSON文件名为out.json ,记录如下。
{
"_id": {
"$oid": "60db75f6f8992a3dd20bb089"
},
"student_number": 3,
"name": "Jim Doeh",
"age": 19,
"Course": "Industrial Science"
}
{
"_id": {
"$oid": "60db75f6f8992a3dd20bb08a"
},
"student_number": 2,
"name": "Joan Dee",
"age": 23,
"Course": "Computer Animation"
}
{
"_id": {
"$oid": "60db75f6f8992a3dd20bb08b"
},
"student_number": 1,
"name": "John Doe",
"age": 17,
"Course": "Computer Science"
}
{
"_id": {
"$oid": "60db75f6f8992a3dd20bb08c"
},
"student_number": 4,
"name": "John Dohn",
"age": 37,
"Course": "Political Science"
}
结论
在这篇文章中,我们已经学会了如何在MongoDB中处理JSON数据,以及使用MongoDB对JSON进行的各种操作。在这些操作中,有结构化数据、将数据从JSON导入和导出到MongoDB,反之亦然。