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.authorsblog.posts的集合,其目的仅仅是为了组织数据,真正的集合blogblog.authorsblog.posts可能半点关系都没有。

数据库

文档构成了集合,集合构成了数据库。一个MangoDB实例可以承载多个数据库,每个数据库有其自己的权限和单独的存储文件。

数据库命名注意点:
- 数据库名不能为空字符串(”“)
- 数据库名不能含有\0或者/,\,.,",*,<,>,:,|,?,$里面的一种
- 数据库名是大小写敏感的,一般尽量用小写字母
- 数据库名大小限制在64byte

MongoDB也有一些自己默认的数据,如下:
1. admin

某些特定的服务器端命令只能在这个库下执行

  1. local

local库中的集合永远都不会被复制,用于存储不准备分布式保存的、只保存在本地(单服务器)的集合

  1. config

当MangoDB用于分片设置时,config库用于保存分片相关的配置信息