MongoDB是强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多功能,如辅助索引、范围查询(rrange query)和排序。同时,MongoDB内置对MapReduce式聚合的支持,以及对地理空间索引的支持。
MongoDB是面向文档的数据库,放弃关系模型的主要原因是为了获得方便的扩展性。
文档
文档是MongoDB的核心概念,多个键及其关联的值有序的放置在一起就是文档。
尽管不同语言表示文档的方法不同,但却有相类似的数据结构,比如映射、散列或字典。
在JavaScript中,文档表示为对象
{"greeting": "Hello, world!"}
更多的时候,文档会包含多个键值对
{"greeting": "Hello,world!", "foo":3}
文档中的键/值对是有序的,因此上面的与下面的文档不同
{"foo": 3, "greeting": "Hello,world!"}
通常文档中的键的顺序并不重要,如Python的字典,Perl与Ruby 1.8中的散列
文档的键是字符串,除了少数例外,键可以是任意的UTF-8字符
键不能含有\0(空字符),它用来表示键的结尾
.和$只有在特定环境使用
以_开头的键是保留的
文档是区分大小写和类型的
{"foo":3}
{"foo":"3"}
{"Foo": 3}
文档中不能有重复的键.
集合
集合是一组文档,如果文档类似于行,则集合类似于表。
集合是无模式的,这意味着一个集合里的文档可以是各式各样的。
{"greeting": "Hello,world"}
{"foo": 5}
集合的命名规则是:
不能是空字符串“”
不能含有\0字符,它表示集合名的结尾
不能以system.开头
不能含有保留字符$
组织集合的一种惯例是使用.字符将命名空间划分为子集合,如博客的两个集合blog.posts与blog.authors。
数据库
多个集合组成数据库,一个MongoDB实例可以承载多个数据库,它们之间完全独立。
数据库名最终会变成文件系统里的文件,有些数据库名是保留的,比如admin。
如果在该数据库添加一个用户,则该用户会自动继承所有数据库的权限。而一些特定的服务器端命令只能从admin数据库运行,
比如列出所有的数据库或关闭服务器。
local数据库的数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
当Mongo进行分片设置时,config数据库在内部使用,保存分片相关信息。