本文将会介绍 MongoDB 中的一些基本概念,例如文档、集合、数据库以及命名空间等。
数据格式
在 MongoDB 中,数据使用 JSON 或者 BSON 格式进行处理和存储。
JSON
JSON 全称为 JavaScript Object Notation,是一种轻量级的数据交换格式。JSON 语法基于 JavaScript ECMA-262 3rd edition 的一个子集。
一个 JSON 文档就是一个由字段和值组成的集合,遵循特定的格式。例如:
{
"first_name": "John",
"last_name": "Doe",
"age": 22,
"skills": ["Programming","Databases", "API"]
}
BSON
BSON 代表 Binary JSON,它是一种类 JSON 文档的二进制序列化。BSON 更注重存储和处理的效率。
文档
MongoDB 以 BSON 文档的形式存储数据记录,简称为文档(Document)。
文档是一个由字段-值组成的集合,结构如下:
{
field_name1: value1,
field_name2: value2,
field_name3: value3,
...
}
以上语法中,字段名是字符串,字段值可以是数字、字符串、对象、数组等。例如:
{
_id: ObjectId("5f339953491024badf1138ec"),
title: "SQL编程思想",
isbn: "9787121421402",
publisher: "电子工业出版社",
published_date: new Date('2021-10-01'),
author: { first_name: "旭阳", last_name: "董"}
}
该文档包含以下字段-值:
- _id 是一个 ObjectId;
- title 是一个字符串;
- isbn 是一个字符串;
- publisher 是一个字符串;
- published_date 是一个 Date 类型数据;
- author 是一个嵌入式文档,包含了两个字段: first_name 和 last_name。
如果你了解关系型数据,可以看出文档就像是表中的一行记录,但是它比数据行更具有表达性。
文档中的字段名需要遵循以下规则:
- MongoDB 保留字段 _id 用于唯一标识一个文档;
- 字段名不能包含 null 字符;
- 最外层的字段名不能进以 $ 符号开始。
集合
MongoDB 使用集合(Colletion)存储文档。一个集合就是一组文档。
MongoDB 中的集合类似于关系型数据库中的表。
MongoDB | RDBMS |
文档 | 行 |
集合 | 表 |
表拥有固定的模式(字段定义),但是集合的模式是动态的。动态模式意味着集合中的多个文档结构可能完全不同。例如,以下文档可以存储在同一个集合中:
{
title: "SQL编程思想",
published_date: new Date('2021-10-01')
}
{
title: "MongoDB从入门到商业实战",
published_date: new Date('2019-09-01'),
isbn": "9787121372247"
}
第2个文档比第1个文档多个一个字段。理论上来说,每个文档都可以有不同的字段。
一个集合拥有一个名字,例如 books。集合名词不能包含以下内容:
- $ 字符;
- null(\0)字符;
- 空字符串;
- 以 system 开头,因为 system* 是 MongoDB 内部集合的保留名。
数据库
MongoDB 集合存储在数据库中。 单个 MongoDB 实例可以包含多个数据库(Database)。
数据库可以通过名字进行引用,例如 bookdb。数据库名不能为以下内容:
- 一个空字符串(“”);
- 包含以下字符:/、\、.、“、*、<、>、:、|、?、$、空格或者 \0(空字符);
- 长度超过 64 字节。
MongoDB 还包含一些保留的数据库名称,例如 admin、local 以及 config,我们不能使用这些名称创建新的数据库。
命名空间
命名空间(Namespace)由数据库名加上其中的集合名组成。命名空间可以用于完整引用一个集合。
例如,对于数据库 bookdb 中的集合 books,命名空间为 bookdb.books。