MongoDB(二)
MongoDB概念解析
1、MongoDB vs SQL
2、数据库
-
一个MongoDB可以建立多个数据库,其中默认数据库为“db”,存储在data目录中
-
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合、权限,不同数据库存储在不同的文件
-
show dbs
:显示所有的数据库列表
db
:可以显示当前数据库对象或集合
use
:连接到指定的数据库,如果不存在则可以创建一个数据库
-
数据库的名称要求:
-
不能是空字符串
-
不得含有' '(空格)、.、$、/、\和\0 (空字符)
-
应该全部小写
-
最多为64个字节
-
保留数据库名:admin(拥有所有数据库的权限)、local(永远不会被复制)、config(分片设置)
-
3、文档(Document)
- 文档是一组键值对(BSON),MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型
-
注意:
-
文档中的键值对是有序的
-
文档中的值不仅可以使在双引号里的字符串,也可以是其他数据类型,甚至可以是另外一个文档
-
MongoDB区分类型和大小写
-
MongoDB的文档不能有重复的键
-
文档的键是字符串,除了少数例外,键可以使用任意的UTF-8字符
-
-
文档命名规范:
-
键不能含有空字符,\0用来表示键的结尾
-
.和$符号有特别的意义,只有在特定的环境下才可以使用
-
以下划线"_"开头的键是保留的(不是严格要求的)
-
4、集合
-
集合就是MongoDB的文档组,类似于关系型数据库中的表
-
集合存在于数据库中,集合没有固定的结构,意味着你可以对集合插入不同格式和类型的数据
-
当第一个文档插入时,集合就会被创建
1、合法的集合名
-
集合名称不能是空字符串
-
集合名不能含有空字符,只能再结合结尾表示
-
集合名称不能以“system.”开头,这是为系统集合保留的前缀
-
用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$
2、Capped collections
-
capped collections就是固定大小的集合
-
它有很高的性能以及队列过期的特性,是高性能的自动的维护对象的插入顺序
5、元数据
-
在MongoDB中,元数据(Metadata)是用于描述和管理数据库、集合和文档的信息。它包含了关于这些对象的属性、结构和配置的数据。
-
元数据在MongoDB中非常重要,它提供了对数据库和集合的结构、配置和性能等方面的了解,帮助管理员和开发人员有效地管理和操作MongoDB数据库。
6、数据类型
1、常用数据类型
2、ObjectId
-
类似于唯一主键,可以很快的去生成和排序,包含12bytes
-
由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间
3、字符串
- BSON 字符串都是 UTF-8 编码
4、时间戳
-
时间戳是指特定事件发生时的标记或记录,通常以数字形式表示。它表示自某个参考点以来经过的时间量,以秒、毫秒或其他单位进行测量。
-
BSON 有一个特殊的时间戳类型用于 MongoDB 内部使用,与普通的 日期 类型不相关。 时间戳值是一个 64 位的值。
-
时间戳的起点通常是某个特定的时刻,称为"纪元"(epoch)。最常用的纪元是1970年1月1日格林威治标准时间(UTC)的午夜。在Unix和类Unix系统中,时间戳通常表示自此纪元以来经过的秒数。例如,当前时间的时间戳是一个表示自1970年1月1日以来的秒数。
-
时间戳还可以包含更精确的时间信息,例如毫秒级或微秒级时间戳,以提供更高的时间分辨率。在这种情况下,时间戳可能包括小数部分,表示秒的小数值。
-
前32位是一个 time_t 值(与Unix新纪元相差的秒数),后32位是在某秒中操作的一个递增的序数
-
BSON 时间戳类型主要用于 MongoDB 内部使用。在大多数情况下的应用开发中,你可以使用 BSON 日期类型。
4、日期
- 日期类型是有符号的, 负数表示 1970 年之前的日期。