MongoDB 是一个面向文档的数据库,它的核心概念与传统的关系型数据库(RDBMS)有所不同。以下是它的四个主要核心概念:
文档 (Document)
- 定义: 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录,但比行更灵活和强大。
- 结构: 文档是一组键值对 (key-value pairs)。这些键值对是有序的。
- 格式: 文档的结构非常类似于 JSON (JavaScript Object Notation)。MongoDB 内部使用 BSON (Binary JSON) 格式来存储文档,BSON 是 JSON 的二进制表示形式,它支持更多的数据类型,并且更易于高效地扫描和编码。
- 特点:
- 每个文档都有一个唯一的
_id
字段,它作为文档的主键标识。 - 文档的字段值可以是各种数据类型,包括字符串、数字、布尔值、数组,甚至可以是嵌套的文档。
- 同一个集合中的文档可以有不同的结构(字段可以不同、数据类型可以不同),这就是所谓的“无模式”或“灵活模式”。
- 每个文档都有一个唯一的
- 类比关系型数据库: 类似于关系型数据库中的一行 (Row)。
集合 (Collection)
- 定义: 集合是 MongoDB 中文档的容器,它是一组相关的文档。
- 结构: 集合没有强制的结构定义(模式),这意味着一个集合中的文档可以有不同的字段和结构。
- 特点:
- 集合存在于数据库中。
- 你不需要预先创建集合,当你向一个不存在的集合插入第一个文档时,MongoDB 会自动创建该集合。
- 集合可以包含大量文档,文档的数量没有固定限制。
- 类比关系型数据库: 类似于关系型数据库中的表 (Table)。
数据库 (Database)
- 定义: 数据库是 MongoDB 中集合的容器,它是一组相关的集合。
- 结构: 数据库提供了组织和管理集合的逻辑命名空间。
- 特点:
- 一个 MongoDB 实例可以拥有多个数据库。
- 每个数据库都有自己的一组集合。
- 权限管理、复制和分片等操作通常在数据库级别进行配置。
- 类比关系型数据库: 与关系型数据库中的数据库 (Database) 概念是直接对应的。
BSON (Binary JSON)
- 定义: BSON 是 MongoDB 用于存储文档和进行网络传输的二进制序列化格式。它是 JSON 的超集。
- 目的:
- 效率: BSON 设计得比 JSON 更快地解析和扫描。它包含长度前缀,使得跳过不需要的字段或确定文档大小变得容易。
- 数据类型: BSON 支持比标准 JSON 更多的数据类型,如日期、二进制数据、ObjectId(用于生成唯一的
_id
)、正则表达式等。这使得 MongoDB 可以存储更丰富的数据类型而无需特殊处理。
- 特点: 虽然你在与 MongoDB 交互时(如使用 shell 或驱动程序)看到的数据通常以 JSON 或其变体的形式呈现,但 MongoDB 内部实际存储和处理的是 BSON 格式的数据。
核心概念之间的关系:
可以这样理解它们之间的层次结构:
一个 MongoDB 实例 可以包含多个 数据库 (Database)。
每个 数据库 可以包含多个 集合 (Collection)。
每个 集合 包含多个 文档 (Document)。
每个 文档 是由键值对组成,内部以 BSON 格式存储。
用关系型数据库的类比来说:
- MongoDB 实例 ≈ 数据库服务器
- 数据库 ≈ 数据库
- 集合 ≈ 表
- 文档 ≈ 行
- 文档中的键值对 ≈ 列
- BSON ≈ 数据的内部存储格式(没有直接的 RDBMS 类比,因为它处理的是结构而非扁平的行)
理解这些核心概念是使用 MongoDB 进行数据存储、查询和管理的起点。文档的灵活性和集合的无模式特性是与关系型数据库最显著的区别。