MongoDB之数据结构!

MongoDB是一款开源、跨平台、分布式,具有大数据处理能力的文档存储数据库。

  • MongoDB用于记录文档结构的数据,比如JSON、XML结构的数据。

官网:https://www.mongodb.com/

适用场景

数据量大,读写操作频繁,数据价值较低,对事务要求不高。

存储结构

文档(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 中的基本数据单元。

img

文档的键是字符串,除了少数例外情况,键可以使用任意 UTF-8 字符:

  • 键不能含有 \0(空字符),这个字符用来表示键的结尾。
  • .$ 有特别的意义,只有在特定环境下才能使用。
  • 以下划线_开头的键是保留的(不是严格要求的)。

BSON

BSON 是 Binary JSON的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中。

  • 还包含允许表示不属于JSON 规范的数据类型的扩展。

BJSON 的遍历速度优于 JSON,这也是 MongoDB 选择 BSON 的主要原因,但 BJSON 需要更多的存储空间。

集合

MongoDB 集合存在于数据库中,没有固定的结构,也就是 无模式 的,这意味着可以往集合插入不同格式和类型的数据。

  • 通常情况插入集合中的数据都会有一定的关联性。

img

集合不需要事先创建,当第一个文档插入或者第一个索引创建时,如果该集合不存在,则会创建一个新的集合。

集合名可以是满足下列条件的任意 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组成的二进制数据,如图像、音/视频等

CodeMongoDB支持直接存储JavaScript代码

Timestamp:存储格林威治时间(GMT)的时间戳

GeoJSON:存储地理空间数据

Text:存储大文本数据