MongoDB

什么是 MongoDB?

分享到

什么是 MongoDB?

MongoDB 是一个开源的面向文档的 NoSQL 数据库系统。数据以 JavaScript 对象表示法 (JSON) 类似结构存储,可在数据存储时指定。

每个文档都可以有自己的结构,其复杂程度可根据需要而定。MongoDB 提供非 SQL 方法和命令,以编程或交互方式管理和查询数据。MongoDB 以其卓越的性能、可伸缩性以及实现快速开发节奏而闻名。

起源故事

MongoDB 由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan 于 2007 年创立。他们此前曾在一家互联网广告公司工作,该公司每秒处理 40 万次广告请求。

该团队开发了许多自定义数据存储以适应这种流量。他们经常遇到可伸缩性和敏捷性方面的难题,这激发了他们创建一种解决这些问题的数据库的灵感。于是,MongoDB 应运而生。

工作原理

为了实现更好的可伸缩性和敏捷性,MongoDB 使用 JSON 变体,即二进制 JSON 或 BSON。BSON 比 JSON 支持更多的数据类型,这为 MongoDB 中可存储的数据类型提供了更大的灵活性。

MongoDB 数据结构

MongoDB 没有由组成的表,而是由文档组成的集合。文档由字段对组成。与关系数据库相比,MongoDB 数据库的组成部分大致可以这样理解:

关系型文档
=集合
=文档
=字段

基本结构如下:

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

文档看起来非常类似于 JSON 对象。文档可以包含任何可用的 BSON 数据类型以及其他文档、数组和文档数组。这种 JSON 风格的格式直接映射到大多数现代编程语言中的原生对象,使其成为开发人员的自然选择。

例如:

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "James", last: "Joyce" },
birth: new Date('Feb 02, 1882'),
death: new Date('Jan 14, 1941'),
books: [ "Ulysses", "Dubliners","Finnegan's Wake" ],
sales : NumberLong(1250000)
}
  • _id 包含一个[ObjectId].
  • name 包含一个嵌入式文档,其中包含 firstlast 字段。
  • birthdeath 包含[Date]类型的值。
  • books 包含一个[字符串].
  • sales 包含一个[NumberLong]类型的值。

类型的值。根据数据模型,关系数据库可能有一个 author 表和一个 book 表,它们通过 author_id 这样的字段连接,而不是一个文档包含詹姆斯·乔伊斯及其作品的所有信息。

在这个特定的简单用例中,文档模型简化了数据访问,并将一起访问的数据存储在一起。

MongoDB 文档与 SQL 表记录

在上一个示例的基础上,让我们看看 MongoDB 中的文档与关系数据库中相同记录的比较。在关系数据库中,存储记录的表可能如下所示:

primary_key | first_name | last_name | age | email | phone_number |
----------- | ---------- | --------- | --- | -------------------- | ------------ |
1 | Tom | Brown | 38 | tom.b@email.com | 555-3802 |
2 | Sarah | Green | 84 | (NULL) | 555-8088 |
3 | Sam | White | 22 | sammi@123.org | 555-1234 |

而正如我们之前看到的作者文档,MongoDB 中类似文档的集合可以用 JSON 建模,如下所示:

{
primary_key: 1,
first_name: "Tom",
last_name: "Brown",
age: 38,
email_address: "tom.b@email.com",
phone_number: "555-3802"
},
{
primary_key: 2,
first_name: "Sarah",
last_name: "Green",
age: 84,
phone_number: "555-8088"
},
{
primary_key: 3,
first_name: "Sam",
last_name: "White",
age: 22,
email_address: "sammi@123.org",
phone_number: "555-1234",
notes: [
"High value customer",
"Has a dog named Fido"
]
}

选择文档数据库还是关系数据库取决于数据库存储的数据类型以及应该如何访问这些数据。MongoDB 的文档优先考虑灵活性而不是严格性,并简化了从应用程序访问数据的方式。

MongoDB 查询语言

由于 MongoDB 数据库是面向文档的,因此数据通常不像关系数据库那样遵循预定义的模式。这使得访问数据与使用结构化查询语言 (SQL) 查询关系数据库不同。MongoDB 有自己的查询语言,简称为 MongoDB 查询语言 (MQL)。

与 SQL 类似,MQL 也允许用户根据特定规范访问数据。您可以控制返回符合相关条件的文档。在本指南中,我们不会深入探讨 MongoDB 查询的细节,但您可以在我们的MongoDB 查询指南中阅读更多内容。

MongoDB 中查询的基本语法如下所示:

db.<collection_name>.find()

为了产生更美观的查询结果格式,您可以使用 .pretty()

db.<collection_name>.find().pretty()

结论

MongoDB 已成为市场上最受欢迎的 NoSQL 数据库。开发人员喜欢使用 MongoDB,因为它能够让他们灵活敏捷地工作。

MongoDB 为关系数据库的严格性提供了替代方案,更适合具有不断演变的模式的应用程序。查看我们其他 MongoDB 内容,获取有关MongoDB 入门、索引、事务等的深入指南

作者简介
Alex Emerich

亚历克斯·埃默里奇

亚历克斯是一个典型的观鸟、热爱嘻哈的“书呆子”,也喜欢写关于数据库的文章。他目前住在柏林,在那里他像利奥波德·布鲁姆一样漫无目的地穿梭于城市。
© . This site is unofficial and not affiliated with Prisma Data, Inc.