2.3 数据库
在MongoDB中,多个文档组成集合,而多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,每个数据库拥有0个或者多个集合。每个数据库都有独立的权限,即便是在磁盘上,不同的数据库也放置在不同的文件中。按照经验,我们将有关一个应用程序的所有数据都存储在同一个数据库中。要想在同一个MongoDB服务器上存放多个应用程序或者用户的数据,就需要使用不同的数据库。
数据库通过名称来标识,这点与集合类似。数据库名可以是满足以下条件的任意UTF-8字符串。
· 不能是空字符串("")。
· 不得含有/、\、.、"、*、<、>、:、|、?、$、(一个空格)、\0(空字符)。基本上,只能使用ASCII中的字母和数字。
· 数据库名区分大小写,即便是在不区分大小写的文件系统中也是如此。简单起见,数据库名应全部小写。
· 数据库名最多为64字节。
要记住一点,数据库最终会变成文件系统里的文件,而数据库名就是相应的文件名,这是数据库名有如此多限制的原因。
另外,有一些数据库名是保留的,可以直接访问这些有特殊语义的数据库。这些数据库如下所示。
· admin
从身份验证的角度来讲,这是“root”数据库。如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出所有数据库或关闭服务器。
· local
这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。(第9章会详细介绍复制及本地数据库。)
· config
MongoDB用于分片设置时(参见第13章),分片信息会存储在config数据库中。
把数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace)。例如,如果要使用cms数据库中的blog.posts集合,这个集合的命名空间就是cms. blog.posts。命名空间的长度不得超过121字节,且在实际使用中应小于100字节。(参考附录B,了解MongoDB中集合的命名空间及内部表示的更多信息。)