MongoDB
什么是 MongoDB?
什么是 MongoDB?
MongoDB 是一个开源、面向文档的NoSQL数据库系统。数据使用类似 JavaScript 对象表示法 (JSON) 的结构存储,可以在数据存储时指定。
每个文档都可以有自己的结构,其复杂性可根据需要增减。MongoDB 提供非 SQL 方法和命令,以编程方式或交互方式管理和查询数据。MongoDB 以其快速的性能、可扩展性以及实现快速开发周期而闻名。
如果你正在使用 MongoDB,请查看 Prisma 的MongoDB 连接器!你可以使用 Prisma Client 自信地管理生产环境的 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从零开始指南或如何添加到现有项目。
起源故事
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
包含一个嵌入式文档,其中包含字段first
和last
。birth
和death
包含[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 入门、索引、事务等的深入指南。
如果你正在使用 MongoDB,请查看 Prisma 的MongoDB 连接器!你可以使用 Prisma Client 自信地管理生产环境的 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的从零开始指南或如何添加到现有项目。