MongoDB

什么是 MongoDB?

分享

什么是 MongoDB?

MongoDB 是一种 开源 文档型 NoSQL 数据库系统。数据使用类似于 JavaScript 对象表示法 (JSON) 的结构存储,这些结构可以在数据存储时指定。

每个文档可以具有自己的结构,并根据需要设置任意程度的复杂性。MongoDB 提供非 SQL 方法和命令,以编程方式或交互式地管理和查询数据。MongoDB 以其快速性能、可扩展性和支持快速开发速度而闻名。

起源故事

MongoDB 由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan 于 2007 年创立。他们之前在一家互联网广告公司工作,该公司每秒提供 400,000 次广告服务。

该团队正在开发许多自定义数据存储库来适应这种流量。他们经常遇到可扩展性和敏捷性方面的困难,这导致了创建解决这些问题的数据库的灵感。瞧,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 的内容进行连接。

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

primary_key | first_name | last_name | age | email | phone_number |
----------- | ---------- | --------- | --- | -------------------- | ------------ |
1 | Tom | Brown | 38 | [email protected] | 555-3802 |
2 | Sarah | Green | 84 | (NULL) | 555-8088 |
3 | Sam | White | 22 | [email protected] | 555-1234 |

MongoDB 文档与 SQL 表记录

{
primary_key: 1,
first_name: "Tom",
last_name: "Brown",
age: 38,
email_address: "[email protected]",
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: "[email protected]",
phone_number: "555-1234",
notes: [
"High value customer",
"Has a dog named Fido"
]
}

扩展前面的示例,让我们看看 MongoDB 中的文档与关系型数据库中的相同记录相比如何。在关系型数据库中,存储记录的表可能看起来像这样

而如我们之前在作者文档中看到的那样,MongoDB 中类似文档的集合可能以 JSON 形式建模,如下所示

选择文档数据库还是关系型数据库取决于数据库存储的数据类型以及应如何访问它。MongoDB 的文档强调灵活性而不是刚性,并简化了从应用程序访问数据的方式。

与 SQL 类似,MQL 也允许用户根据特定规范访问数据。您可以控制返回符合特定需求的文档。本指南不会深入探讨 MongoDB 查询的细节,但您可以在我们的 MongoDB 查询指南 中了解更多信息。

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

db.<collection_name>.find()

为了使查询结果更易于阅读,您可以使用 .pretty()

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

结论

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

MongoDB 为关系型数据库的僵化性提供了一种替代方案,更适合于具有不断变化的模式的应用程序。查看我们其他关于 MongoDB 的内容,其中包含关于 MongoDB 入门、索引、事务等的深入指南

关于作者
Alex Emerich

Alex Emerich

Alex 是一位典型的观鸟爱好者,喜欢嘻哈音乐和阅读书籍,他也喜欢撰写有关数据库的文章。他目前居住在柏林,在那里你可以看到他像利奥波德·布卢姆一样漫无目的地在城市中行走。