基本概念

文档

文档是MongoDB中数据的基本单元,非常类似于关系型数据库中的行,其格式非常类似于python中的字典,也是由键值对组成。

{"greet":"Hello,World!","foo":3}

文档中的键是字符串,但有以下几个规定:

  • 键不能含有\0(空字符),这个字符用于表示键的结尾。
  • .和$有特定意义,只能在特定环境下使用。
  • MongoDB不但区分类型,还区分大小写。
{"foo":"3"}和{"foo":3}不同
{"foo":3}和{"FOO":3}不同
  • MongoDB的文档不能有重复的键。
{"foo":3,"foo":4}非法
  • 文档中的键值对是有序的。
{"foo":3,"number":4}和{"number":4,"foo":3}
集合

集合是一组文档,类似于关系型数据库中的一个表。

{"greet":"Hello World!"}
{"foo":3}

集合中的文档值的类型可以不同,键也可以不同,但是为了方便管理,一般将同一种类型的文档放在一个集合里,不然集合里面的数据类型错综复杂,对管理员来说是一场噩梦。

集合的命名可以是满足下列条件的任意UTF-8字符串:

  • 集合名不能是空字符串("")。
  • 集合名不能含有\0(空字符),这个字符用于表示集合名的结束。
  • 集合名不能以"system."开头,这是系统集合保留的前缀。
  • 用户创建的集合不能在集合名中包含保留字符’$’。

子集合是集合下的集合,类似于电脑文件夹下的子文件夹,它没有任何特别的属性,但对管理文件来说意义非凡,经常使用。

数据库

多个文档构成集合,多个集合就构成数据库,当然数据库内也可以没有任何集合。

数据库的命名可以是满足下列条件的任意UTF-8字符串:

  • 集合名不能是空字符串("")。
  • 数据库名区分大小写。
  • 数据库名最多为64字节。

有些数据库名是保留的,可以直接访问这些有特殊语义的数据库,如下:

  • admin

这是一个"root"数据库。如果给一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。而且,一些特定的操作也只能从admin数据库运行,如列出所有数据库或关闭服务器。

  • local

这个数据库永远都不可复制,且一台服务器上的所有数据都可以存储在这个数据库。

  • config

MongoDB用于分片设置时,分片信息会存储在config数据库中。

命名空间

把数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace)。例如,如果要使用cms数据库中的blog.posts集合,这个集合的命名空间就是cms.blog.posts。

命名空间长度不得超过121字节,且在实际使用中应小于100字节。