MongoDB之数据结构!
MongoDB之数据结构!
月伴飞鱼
MongoDB
是一款开源、跨平台、分布式,具有大数据处理能力的文档存储数据库。
MongoDB
用于记录文档结构的数据,比如JSON、XML
结构的数据。
适用场景
数据量大,读写操作频繁,数据价值较低,对事务要求不高。
存储结构
文档(Document) :
- MongoDB 中最基本的单元,由 BSON 键值对组成,类似于关系型数据库中的行(Row)。
集合(Collection) :
- 一个集合可以包含多个文档,类似于关系型数据库中的表(Table)。
数据库(Database) :
- 一个数据库中可以包含多个集合,可以在 MongoDB 中创建多个数据库,类似于关系型数据库中的数据库(Database)。
SQL与MongoDB常见术语对比 :
SQL | MongoDB |
---|---|
表(Table) | 集合(Collection) |
行(Row) | 文档(Document) |
列(Col) | 字段(Field) |
主键(Primary Key) | 对象 ID(Objectid) |
索引(Index) | 索引(Index) |
嵌套表(Embeded Table) | 嵌入式文档(Embeded Document) |
数组(Array) | 数组(Array) |
文档
MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。
- 字段的值可能包括其他文档、数组和文档数组。
- https://www.mongodb.com/docs/manual/reference/bson-types/
文档的键是字符串,除了少数例外情况,键可以使用任意 UTF-8 字符:
- 键不能含有
\0
(空字符),这个字符用来表示键的结尾。.
和$
有特别的意义,只有在特定环境下才能使用。- 以下划线
_
开头的键是保留的(不是严格要求的)。
BSON
BSON 是 Binary JSON的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中。
- 还包含允许表示不属于JSON 规范的数据类型的扩展。
BJSON 的遍历速度优于 JSON,这也是 MongoDB 选择 BSON 的主要原因,但 BJSON 需要更多的存储空间。
集合
MongoDB 集合存在于数据库中,没有固定的结构,也就是 无模式 的,这意味着可以往集合插入不同格式和类型的数据。
- 通常情况插入集合中的数据都会有一定的关联性。
集合不需要事先创建,当第一个文档插入或者第一个索引创建时,如果该集合不存在,则会创建一个新的集合。
集合名可以是满足下列条件的任意 UTF-8 字符串:
- 集合名不能是空字符串
""
。- 集合名不能含有
\0
(空字符),这个字符表示集合名的结尾。- 集合名不能以
system.
开头,这是为系统集合保留的前缀。
system.users
集合保存着数据库的用户信息。system.namespaces
集合保存着所有数据库集合的信息。- 集合名必须以下划线或者字母符号开始,并且不能包含
$
。
数据库
数据库用于存储所有集合,而集合又用于存储所有文档。
一个 MongoDB 中可以创建多个数据库,每一个数据库都有自己的集合和权限。
数据库名可以是满足以下条件的任意 UTF-8 字符串:
- 不能是空字符串
""
。- 不得含有
' '
(空格)、.
、$
、/
、\
和\0
(空字符)。- 应全部小写。
- 最多 64 字节。
数据库名最终会变成文件系统里的文件。
数据类型
String
:存储变长的字符串
Number
:存储整数或浮点型小数
Boolean
:存储true、flase
两个布尔值
Date
:存储日期和时间
Array
:可以存储由任意类型组成的数组
Embedded-Document
:可以将其他结构的文档,嵌套到一个文档的字段中
Binary
:存储由0、1
组成的二进制数据,如图像、音/视频等
Code
:MongoDB
支持直接存储JavaScript
代码
Timestamp
:存储格林威治时间(GMT
)的时间戳
GeoJSON
:存储地理空间数据
Text
:存储大文本数据