如何在MongoDB中处理JSON

2,422 阅读6分钟

在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 Doe24, 08, 2020
2帖子二JSON数据类型数据库, 编码, 编程简-多伊01, 01, 2021
3发表三篇REST API教程APIs, 数据传输, JavaScriptJim Doe08, 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,反之亦然。