02-MongoDB基础知识
文档
文档是MongoDB中的核心概念:文档就是键值对的一个有序集。
文档区分大小写,所以下方两个文档是不同的:
{"foo":3}
{"Foo":3}
MongoDB的文档不能有重复的键,以下文档是非法的:
{"greeting" : "Hello,World", "greeting" : "Hello,MongoDB"}
MongoDB文档中的键值对是有序的,以下两个文档是不同的:
{"x" : 1, "y" : 2}
{"y" : 2, "x" : 1}
通常,字段数据并不重要,无需让数据库模式依赖特定的字段数据(MongoDB会对字段重新排序)
集合
集合就是一组文档,如果将MongoDB中的文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表。
集合是动态模式的。这意味着一个集合里面的文档可以是各式各样的,例如两个文档可以存储在同一个集合里面:
{"greeting": "Hello,World"}
{"foo" : 5}
上面的文档不光值的类型不同(一个是字符串,一个是整数),它们的键也完全不同。因为集合里面可以放置任何文档,随之而来的一个问题是:还有必要使用多个集合吗?
- 对开发者、管理者友好:如果把各种文档不加区分放在同一个集合里,开发者就要确保每次查询只返回特定类型的文档,要么让直行查询的应用程序来处理所有不同类型的文档。
- 在一个集合内查询特定文档的速度不高,分开查询多个集合要快的多,比如一个集合里面一个名为”type”的字段用户知名文档是xml,java,还是js文件,从一个集合中查询这个三种类型的文档速度很慢,把三种不同的类型拆分为三个不同的集合,每次都要查询相应的集合,速度会快很多。
- 把同种类型的文档放在一个集合里,数据会更加集中
- 创建索引时,需要使用文档的附加结构(特别是创建唯一索引时)。索引时按照集合来定的。在一个集合中只放入一种类型的文档,可以更有效地对集合进行索引。
命名
- 集合名不能是空字符串
- 集合名不能包含\0(空字符),这个字符表示集合名的结束
- 集合名不能以”system.”开头,这些是为系统保留的前缀
- 用户创建的集合不能在集合名中包含保留字符‘$’,因为系统生成的集合中有包含的
- 子集合使用”.”分隔不同的命名空间的子集合
数据库
在MongoDB中,多个文档组成集合,多个集合组成数据库。
一个MongoDB实例可以承载多个数据库,每个数据库拥有0个或者多个集合。每个数据库都有独立的权限,即使在磁盘上,不同的数据库也存放在不同的那文件中,按照经验,我们将有关一个应用程序的所有数据读存储在同一个数据库中。
- 不能为空字符串(” “)
- 不能以$开头,不能含有/、\、.、”“、*、<、>、:、|、?、
- 不能包含.(点号)和空字符串
- 数据库名区分大小写(建议数据库名全部使用小写)
- 数据库名最长为64个字节
- 不要与系统保留的数据库名相同,这写数据库包括:admin,local,config等