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数据库在内部使用,保存分片相关信息。

results matching ""

    No results matching ""