一.术语说明
1.document是mongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行(但是比行要复杂的多)。
2.collection可以看成是没有模式的表。
3.mongoDB单个实例可以容纳多个独立的database,每一个都有自己的集合和权限。
4.mongoDB自带简洁但是功能强大的javascript shell,这个工具对于管理mongoDB实例和操作数据作用很大。
5.每个document都有一个特殊的键“_id”,他在文档所处的集合中是唯一的。
二.document
1.document的key-value是有序的。例如:{“foo”:"3","greeting":"hello"}和{“greeting”:"hello","foo":"3"}是不同的。
2.key不能包含有\0(空字符串).和$有特殊的意义,_开头的键是保留的。
3.mongoDB的document不能含有重复的key。
三.collection
1.collection就是一组文档。mongoDB中的document类似于RDBMS中的行,那么collection就是表。
2.无模式
也就是说一个collection中的document结构不一样。同时可以是一个key-value,也可以有多个key-value组成的document。
Q:在这种情况下,既然一个collection中可以存储各种各样的document,哪还有必须要在实际的项目中,建立多个collection吗?把所有的document放在一个collection中不就可以了?
A:(1)把各种各样的document都混在一个collection中,不仅对开发者来还是管理者来说都是噩梦。开发者要么确保每次执行查询的时候只返回需要的种类,要么让执行查询的应用程序来处理所有不同类型的文档。如果查询博客还要剔除那些含有作者数据
(2)在一个集合里面查询特定的文档在速度很不划算,分开做多个collection要快得多。
(3)把同种类型的文档放在一个collection中,这样数据会更加的集中。从只含有博客文章的collection里面查询几篇文章,会从比含有作者和文章数据的集合里面要少消耗磁盘寻道操作。
(4)当创建索引的时候,文档会有附加的结构(尤其是唯一索引的时候)。索引是按照集合来定义的,把同种类型的文档放在同一个collection中,可以使索引更加的有效。
3.
集合名可以是满足下列条件的任意UTF-8字符串
集合名不能是空字符串“”
集合名不能含有\0字符(空字符),这个字符表示集合名的结尾
集合名不能以“system.”开头,这是为系统集合保留的前缀。例如system.users这个集合保存着数据库的用户信息。
用户创建的集合名字不能含有保留字符$.
子集合
组织集合的一种惯例是使用"."字符分开的按命名空间划分的子集合。例如,带有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors.
这样做的目的只是为了使组织结构更好些,也就是说blog这个集合(这里根本就不需要存在)及其子集合没有任何关系。
GridFS是一种存储大文件的协议,使用子集合来存储文件的元数据,这样就与内容块分开了。
Mongodb的web控制台通过子集合的方式将数据组织在DBTOP部分
在Mongodb中使用子集合来组织数据是很好的方法。
4.数据库
Mongodb中多个文档组成集合,同样多个集合可以组成数据库。一个Mongodb实例可以承载多个数据库。将一个应用的所有数据都存储在同一个数据库中的作法就很好。
和集合一样,数据库也通过名字来标识。
不能是空字符串("")
不能含有''(空格)、.、$、/、\和\0(空字符)
应全部小写
最多64个字节
要记住一点,数据库名最终会变成文件系统里的文件。
有一些数据库名是保留的
admin
从权限的角度来看,这是"root"数据库
local
这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config
当Mongodb用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
把数据库的名字放到集合名前面,得到就是集合的全限定名,成为命名空间。命名空间的长度不得超过121字节,在实际使用当中应该小于100字节