Mongo简介
MongoDB是一种强大、灵活、追求性能、易扩展的数据库;是面向文档的数据库,不是关系型数据库,是NoSQL(not only SQL)的一种。
MongoDB的面向文档,就是将关系型数据库中的“行”的概念换成了更加灵活的”文档”,以文档为存储单位。文档的值可以是数组、文档等复杂的数据模型,这使得MongoDB可以支持复杂的结构类型;另外MongoDB也不需要预先定义文档的键值,这使得开发者增加或者删除属性变得异常方便。
MongoDB功能特点
- 索引
MangoDB支持通用辅助索引、复合索引、地理空间索引和全文索引,能进行多种快速查询。
- 聚合
MangoDB支持MapReduce、aggregation pipeline等聚合
- 特殊集合
MongoDB提供TTL集合(超时集合)和固定大小的集合(适用于日志)
- 文件存储
MangeDB支持简单的文件存储。
- 不具备的功能
事务
文档
文档可以看作MongoDB的基本单元,相当于关系数据库表中的行,但是要比行复杂的多。
它的形式为key-value键值对,不同的编程语言有不同的表现形式。Java中是Map、Python中字典,而在JavaScript中是JSON对象。如下所示为一文档:
{"greeting" : "Hello World"}
文档注意点:
- 文档中的key/value是有序的,没有相同的两个文档
- 文档中的value的数据类型没有限制,甚至可以是文档
- 文档的key一般是字符串,并且对于数据类型和大小写敏感
- 文档的key不能含有\0
(等同于null
,这个是用来表示key的结束),.
和$
只能在特殊场合使用,一般都是作为保留字
- 文档的key不能重复
集合
集合是一组文档的组合,相当于关系型数据库中的表。
一个集合可以存储多种多样的文档,譬如以下文档可以存储在同一个集合中。
{"greeting" : "Hello World"}
{"foo" : 5}
但是MongDB不推荐你这样做。这就像关系型数据库一样,不同的类型放在一起不便于开发者的使用和管理者的管理,实际上这等同于灾难。
集合命名注意点:
- 集合名不能为空字符串(”“)
- 集合名不能含有\0
(等同于null
,这个是用来表示集合名称的结束)
- 用户创建的集合集合名不能以system
开头,system
前缀是用来表示内部集合
- 用户创建的集合集合名不能含有$
子集合
子集合特别适用于在MongoDB中组织数据,它以.
来分割集合名。譬如有一个blog的应用,我们可以建立blog.authors
和blog.posts
的集合,其目的仅仅是为了组织数据,真正的集合blog
和blog.authors
、blog.posts
可能半点关系都没有。
数据库
文档构成了集合,集合构成了数据库。一个MangoDB实例可以承载多个数据库,每个数据库有其自己的权限和单独的存储文件。
数据库命名注意点:
- 数据库名不能为空字符串(”“)
- 数据库名不能含有\0
或者/,\,.,",*,<,>,:,|,?,$
里面的一种
- 数据库名是大小写敏感的,一般尽量用小写字母
- 数据库名大小限制在64byte
MongoDB也有一些自己默认的数据,如下:
1. admin
某些特定的服务器端命令只能在这个库下执行
- local
local库中的集合永远都不会被复制,用于存储不准备分布式保存的、只保存在本地(单服务器)的集合
- config
当MangoDB用于分片设置时,config库用于保存分片相关的配置信息