【MongoDB系列】:MongoDB基础知识

基础概念

  • 文档是MongoDB中数据的基本单元,类型关系型数据库的行。

  • 集合可以看作是拥有动态模式的表。

  • MongoDB是一个实例可以拥有多个相互独立的数据库,每个数据库都有自己的集合。

  • 每个文档都有一个特殊的键“_id”,该键在文档所属得集合中是唯一的。

  • 带有JavaScript Shell,用来管理MongoDB得实例和数据操作。

一、文档

文档就是键值对得一个有序集。如:{"title" : "Hello MongoDB"}

文档的键是字符串,除极少数例外,键可以使用任意的UTF-8字符。

    • 不能含有\0(空字符串)。

    • 不能使用.和$ 符号。这2个符号具有特殊意义,只能在特定环境使用。

MongoDB区分类型且区分大小写。如:{"age" : "20"}和{"age" : 20} 不同  {"age" : 20}和{"Age" : 20}也不同

文档不能包含重复的键,不然就是非法的。

二、集合

集合就是一组文档。

集合是动态模式,说明一个集合里面文档可以是各种各样得。


多个集合原因:

1、文档不区分放在同一个集合里,对于开发和管理都是噩梦,数据混乱,查询麻烦。

2、在一个集合里面查询特定类型的文档速度不快,分开更快捷。

3、同种类型文档集合放在一个集合,方便快捷。

4、创建索引时,需要使用文档的附加结构。索引是按照集合来定义,一个集合只放入一种类型的文档,可以更有效对集合进行索引。


命名方式:

  • 集合使用名称进行标识。

  • 集合名不能是空字符串("")。

  • 集合名不能包含\0字符(空字符)。

  • 集合名不能以“system.”开头,这是系统集合保留的前缀。

  • 用户创建的集合不能在集合中包含保留字符“$”。

三、数据库

多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载多个数据库,每个数据库拥有0或者多个集合。每个数据库都有独立权限,key放置在不同的文件中。

命名规则:

    • 不能是空字符串("")。

    • 最好使用ASCII中的字母和数字

    • 区分大小写,为了简单和方便,数据库名全部小写

    • 数据库名最多为64字节


【admin】,这是root数据库。

【local】,不可复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

【config】,分片设置时,分片信息回存储在config数据库中。

四、数据类型

  • null:用于表示空值或者不存在的字段。 如:{"name" : null}

  • 布尔型: true和false  如:{"isNum" : true}

  • 数值:shell默认使用64位浮点型数值。{"total" : 3} 或者 {"total" : 3.14}

     对于整型值 {"x" : NumberInt("3")}   \ {"x" : NumberLong("3")}

  • 字符串:UTF-8字符串都可以表示为字符串类型的数据

  • 日期:存储自新纪元以来经过的毫秒数,不存储时区。 new Date()

  • 正则表达式:使用正在表达式作为限定条件,语法和js相同

  • 数组: 数组列表或数据集可以表示为数组

  • 内嵌文档:可嵌套其他文档,被嵌套得文档作为父文档的值。

  • 对象ID:一个12字节的ID,是文档的唯一标识。{"X" : ObjectId()}

  • 二进制数据:任意字节的字符串

  • 代码:查询和文档中可以包括任意js代码

五、_id和ObjectId

MongoDB中存储的文档必须有一个“_id”键。这个键的值可以是任何类型,默认是个ObjectId对象。在一个集合中,每个文档都有唯一的“_id”,确保集合中的每个文档都能被唯一标识。

ObjectId是“_id”默认类型。不同的机器都能用全局唯一的同种方法方便生成。

ObjectId使用12字节的存储空间,是一个由24个十六进制数字组成的字符串。

ObjectId前面4个字节是从新纪元开始的时间戳,单位是秒。

接着3字节是所在主机的唯一标识符,通常是机器主机名得散列值(hash),这样可以确保不同主机生成不同的ObjectId,不会冲突。

为了确保同一台机器上并发的多个进程产生的ObjectId是唯一,接着2个字节来自产生ObjectId得进程的进程标识符(PID)。

最后3个只自动增加的计数器,确保相同进程同1秒产生的ObjectId不一样。

如果在插入文档时候没有“_id”键,系统会自动帮你创一个。



你可能感兴趣的:(【MongoDB系列】:MongoDB基础知识)