什么是 MongoDB?

MongoDB 是一种文档数据库,以易用性和可伸缩性而闻名。它是一种 NoSQL 数据库,与 PostgreSQL 等关系型数据库中基于表格的传统格式相比,它使用了一种更灵活的方式来存储数据。

MongoDB 不使用行和列,而是将数据存储在类似 JSON 的文档中,这些文档包含高度可自定义的字段和对应的值。下面是一个简单的示例,展示了如何在文档中存储用户个人资料:

“_id”: “6327c1a4b3e3e8a5e6f7g6j1”,

“first_name”: “Praveen”,

“occupation”: “Developer”,

“employment_date”: “12/1/2025”

由于 MongoDB 具有灵活的架构,因此您不必在所有文档中使用这些相同的字段。您可以删除“occupation”字段,添加“email_address”字段,等等。

但是,如果文档之间保存的同类数据不一致,例如在一个地方使用“email”字段,在另一个地方使用“email_address”字段,或者以不同格式保存日期,这种灵活性可能会在以后带来麻烦。

如果您使用关系型数据库来存储这类数据,其中一些用户个人资料有职业记录,而另一些则没有,这可能会导致表臃肿,其中包含许多空字段,或者需要将复杂且重复的数据结构分布在多个表中。

想要直接设置面向文档的数据库?了解如何开始使用 Firestore

在 Firestore 上运行与 MongoDB 兼容的应用

要点总结

MongoDB 是一种 NoSQL 文档数据库,非常适合处理大量非结构化或半结构化数据。下面简要介绍 MongoDB 的关键特性和优势:

  • 文档模型:数据以类似 JSON 的“文档”形式存储。与日常意义上的文档(包含供人类阅读的自由格式文本)不同,类似 JSON 的文档使用字段-值对来整理数据,以便应用轻松读取。
  • 灵活的架构:MongoDB 中的每个文档都可以有自己的字段和结构,与关系型数据库中严格的列和行相比,它提供了更大的灵活性。
  • 高度可伸缩:MongoDB 旨在进行横向扩容,可将工作负载高效地分布到多个服务器上,因此非常适合根据流量需求来扩缩数据。
  • 直观:一些开发者更喜欢 MongoDB,因为其查询语言的结构与 JavaScript 等熟悉的编程语言类似,因此很容易上手。
  • 支持多种语言:借助适用于大多数编程语言(包括 Java、Python 和 C)的驱动程序,各种应用都可以轻松查询 MongoDB 数据库。

使用 MongoDB 的优势

MongoDB(包括其原始产品以及其他几个与之兼容的数据库)已成为开发者的热门选择,因为它们在用户友好的软件包中提供了相当大的灵活性。

  • 敏捷开发灵活模式:借助 MongoDB,您可以根据需要调整架构结构和验证级别。您可以从宽松的结构开始快速进行原型设计,然后引入严格的验证规则,并随着应用日趋成熟而不断完善数据模型。如果您想快速构建,而无需预先定义整个数据结构,MongoDB 的灵活性将非常有用。
  • 横向扩缩以实现适应性:MongoDB 专为横向扩缩而设计,可将数据分布到多个节点或集群中,这一过程称为“分片”。通过在多个服务器之间分摊负载,您可以快速保存或召回数据,并根据需求变化进行调整。
  • 可用性:MongoDB 提供内置的数据复制功能,可实现高可用性和容错能力。如果发生硬件故障或在维护期间,不同数据库服务器上的多个数据副本可让数据库提供自动故障切换。

在 MongoDB 中进行人性化查询

MongoDB 的查询语言 (MQL) 旨在让开发者能够立即上手,尤其是那些了解 JavaScript 的开发者。这样,您就可以更轻松地开始编写强大的查询来检索、更新或删除数据。

您可以灵活地使用不同类型的查询来查找所需的确切数据,包括:

  • 字段查询:在文档中查找与特定值完全匹配的内容,例如职业字段为“开发者”的所有用户。
  • 范围查询:查找在特定范围内的数据,例如年龄大于 35 岁的所有用户。
  • 正则表达式 (regex) 查询:查找与特定模式匹配的文本。例如,您可以找到所有名字以字母“B”开头的用户。

总体而言,MongoDB 在检索整个对象的信息方面表现出色。例如,如果您想收集一位用户的所有信息,包括姓名、订单记录和偏好,这些信息很可能都在一个文档中。只需一个查询,即可快速获取所需的一切。

不过,对于需要跨多个不同的高度结构化集合进行复杂 JOIN 的查询,MongoDB 的效率较低,而这正是关系型数据库的优势所在。

MongoDB 的常见应用场景

MongoDB 特别适合各种现代应用需求,包括:

MongoDB 等文档数据库可以为支持 AI 模型语义搜索提供坚实的基础,因为 AI 模型通常需要记住过去的互动和用户偏好。文档数据库可以将这种“记忆”存储为灵活的 JSON 或 BSON(二进制 JSON)文档,从而轻松更新和检索复杂的数据结构。

MongoDB 灵活的文档模型非常适合存储文章、评论、用户数据和其他各种内容,而无需使用严格的架构。

零售商品通常具有多种属性(尺寸、颜色、材质等)。MongoDB 可以轻松适应这些不同的数据点。

MongoDB 可以存储和处理大量传感器数据、事件和指标,从而实现实时分析洞见。

借助 MongoDB 的 JSON 格式,可以轻松存储用户偏好、浏览记录和个性化内容。

MongoDB 替代方案

MongoDB 可能是许多应用的理想数据库选择,特别是那些依赖于半结构化或非结构化数据的应用,或者数据模型可能会不断演变的应用。不过,您不妨权衡一下其他数据库选项,确保做出正确的选择。

MongoDB、Apache Cassandra 和 SQL 数据库各有优势,具体取决于您的应用场景。下面我们来了解一下它们的一些区别,帮助您为自己的应用选择合适的选项。

功能

SQL 数据库(关系型)

MongoDB (NoSQL)

Apache Cassandra (NoSQL)

数据模型

表格(行和列)

类似 JSON 的文档

宽列存储(表内每行具有灵活列)

架构

固定的预定义架构

灵活的动态架构

比文档数据库更结构化,但具有一定的灵活性(列可以因行而异)

查询语言

SQL(结构化查询语言)

MongoDB 查询语言 (MQL)

Cassandra 查询语言 (CQL)

可伸缩性

纵向(扩容)、复杂的横向

通过分片进行横向扩容

跨多个节点进行横向扩容,专为大规模分布而设计

数据结构

结构化数据

非结构化数据、半结构化数据和结构化数据

非结构化数据、半结构化数据和结构化数据

关系

外键和 JOIN

嵌入文档、参考资料

反规范化

适用场景

需要强数据一致性和使用 JOIN 的复杂查询的应用

快速开发、不断发展的数据模型和易用性

极高的写入吞吐量、高可用性和大规模数据

功能

SQL 数据库(关系型)

MongoDB (NoSQL)

Apache Cassandra (NoSQL)

数据模型

表格(行和列)

类似 JSON 的文档

宽列存储(表内每行具有灵活列)

架构

固定的预定义架构

灵活的动态架构

比文档数据库更结构化,但具有一定的灵活性(列可以因行而异)

查询语言

SQL(结构化查询语言)

MongoDB 查询语言 (MQL)

Cassandra 查询语言 (CQL)

可伸缩性

纵向(扩容)、复杂的横向

通过分片进行横向扩容

跨多个节点进行横向扩容,专为大规模分布而设计

数据结构

结构化数据

非结构化数据、半结构化数据和结构化数据

非结构化数据、半结构化数据和结构化数据

关系

外键和 JOIN

嵌入文档、参考资料

反规范化

适用场景

需要强数据一致性和使用 JOIN 的复杂查询的应用

快速开发、不断发展的数据模型和易用性

极高的写入吞吐量、高可用性和大规模数据

MongoDB 与 SQL 数据库

SQL 数据库(如 PostgreSQL)和 NoSQL 文档数据库(如 MongoDB)代表了两种基本的数据管理方法。

与 MongoDB 不同,SQL 数据库(也称为关系型数据库)将数据整理成表。每个表都有预定义的行和列格式,因此与 MongoDB 的文档格式相比,SQL 数据库通常称为“僵化”。

PostgreSQL 等 SQL 数据库的吸引力在于能够使用 JOIN 运行复杂的查询,高效地合并来自多个表的信息。其中可能包括这样的查询:“向我展示上个月在芝加哥购买过蓝色衬衫的 30 岁以上客户。”

MongoDB 与 Apache Cassandra

MongoDB 和 Apache Cassandra 都是功能强大的 NoSQL 数据库,但它们基于截然不同的架构构建,并针对不同的用例进行了优化。

Apache Cassandra 是一种宽列存储,这意味着它将数据整理成行和列,但具有灵活的架构,允许同一列族中的不同行具有不同的列。

它还以处理跨多个服务器的大量数据而闻名,可在分布式系统中提供高可用性和高写入性能。

哪些数据库与 MongoDB 兼容?

如果您想使用 MongoDB 进行构建,有几种途径可供选择。您可以直接从创建者 MongoDB Inc. 获取数据库,也可以使用其他提供方提供的 MongoDB 兼容服务。兼容性是指它支持 MongoDB API 和查询语言 (MQL),让您只需进行极少的更改,即可使用相同的代码、驱动程序和工具,同时还能享受额外的功能或性能优势。

以下是一些最知名的 MongoDB 兼容选项:

  • MongoDB 社区版企业:这些是 MongoDB 的原始可下载版本。您可以在自己的基础设施上运行这些模型,从而完全掌控部署。
  • MongoDB Atlas:MongoDB 创建者提供的数据库即服务 (DBaaS) 选项。Atlas 是一项全托管式云服务,可处理所有基础设施、扩缩、备份和安全事务。它在多个云平台上提供,包括 Google Cloud。
  • Firestore:另一个全托管式选项,适合想要专注于构建应用而无需担心运维的开发者。Firestore 是一种 NoSQL 文档数据库,提供了一系列独特的功能,我们将在下文中详细介绍。
  • Amazon DocumentDB:一项与 MongoDB API 兼容的 Amazon Web Services (AWS) 托管式数据库服务。它旨在作为已在使用 MongoDB 且想要在 AWS 基础设施上运行的应用的直接替代方案。
  • Azure Cosmos DB:Microsoft 的全球分布式多模型数据库服务也为 MongoDB 提供了 API。这样,您就可以使用熟悉的 MongoDB 工具和技能在 Azure 云平台上构建应用。

MongoDB 常见问题解答

文档数据库是一种 NoSQL 数据库,以灵活的单元(称为“文档”)存储数据,这些文档通常采用类似 JSON 的结构。与包含行和列的表不同,这些文档以字段-值对的形式来格式化信息,例如“Name”:“John”。

每个文档通常包含一个对象的数据,例如库存中的商品。在文档集合中,您可以使用不同的字段,因此,如果您不想在开始构建应用之前就确定一个完全完美的数据结构,或者您要存储具有各种变量的对象的有关信息,那么这种数据库非常适合您。

选择哪种数据库取决于您存储的数据类型、应用的需求以及您需要的灵活性。

文档数据库非常适合包含大量变量的数据,因为并非每个对象都需要相同的字段。文档数据库的灵活性也使其深受开发者的欢迎,因为开发者希望使用可以随时间变化的数据结构快速构建应用。

另一方面,如果您想要严格的数据一致性,例如用户账号,其中每个条目都需要填充完全相同的字段,那么关系型数据库是更好的选择。如果您的应用依赖于使用 JOIN 的复杂查询,需要从多个表中拉取数据以生成结果,那么关系型数据库将是理想的工具。

MongoDB 支持多种编程语言与数据库互动,包括 JavaScript、Python、Java、C#、C++ 等。MongoDB 查询语言 (MQL) 是一种类似 JSON 的语言,用于数据库操作。

MongoDB 采用类似 JSON 的数据结构 (BSON) 和灵活的架构,让现代开发者能够直观地进行基本的数据存储和检索,因此通常被认为易于上手。不过,对于高级用例,掌握起来可能会比较困难,这主要是因为设计高效数据模型(嵌入与引用)的复杂性,以及掌握复杂查询和高性能扩缩所需的多阶段聚合框架的复杂性。

什么是具有 MongoDB 功能的 Firestore?

Firestore 是一种全托管式文档数据库,可提供简单易用的云数据管理功能,并与 Firebase 无缝集成。Firebase 是一个专为创建 AI 应用和智能体而设计的平台。

Firestore 完全兼容 MongoDB 驱动程序、工具和代码,让您能够更轻松地启动新项目或迁移现有应用,同时保留熟悉的查询语言和功能。

  • Google Cloud 全面托管:所有运营管理工作(例如扩缩、更新、备份和安全)均由 Google 处理。
  • 实时更新:通过实时数据让用户随时掌握最新动态。Firestore 在实时数据同步方面表现出色,非常适合需要实时更新的应用,例如聊天应用、协作工具或需要即时刷新数据的移动应用。
  • 全球可伸缩性:借助 Firestore 的自动扩缩和多区域数据复制功能,您可以轻松应对业务增长,并确保全球用户都能以低延迟访问,而无需配置容量、分片或预配存储空间。
  • 业界领先的可用性和性能:Firestore 具有业界领先的高可用性(承诺 99.999% 可用性的服务等级协议)和数毫秒的读取延迟性能。
  • 向量数据库:您可以在 Firestore 中存储向量嵌入,并对数据运行向量搜索。这使您能够执行快速相似性搜索,而这是现代 AI 应用和智能体的基础。
  • 内置 Google Cloud 集成:作为 Google Cloud 和 Firebase 的一部分,Firestore 可与 Firebase Auth、BigQuery 和许多其他强大的服务无缝集成。
  • 低用量免费层级:Firestore 提供免费层级,非常适合希望随着业务增长而扩缩且无需前期费用的初创公司或小型项目。

迈出下一步

立即使用免费层级,体验强大且可扩缩的文档数据库。获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。