首先推荐一款mongodb可视化工具:Robo 3t 下载连接为 https://robomongo.org/,而后瞅一眼数据库的使用排名,说明学习MongoDB是很是有必要的html
无论咱们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面咱们挨个介绍。python
下表将帮助您更容易理解Mongo中的一些概念:web
一、文档是MongoDB的核心概念。文档就是键值对的一个有序集{'msg':'hello','foo':3}。相似于python中的有序字典。mongodb
须要注意的是: #一、文档中的键/值对是有序的。 #二、文档中的值不只能够是在双引号里面的字符串,还能够是其余几种数据类型(甚至能够是整个嵌入的文档)。 #三、MongoDB区分类型和大小写。 #四、MongoDB的文档不能有重复的键。 #五、文档中的值能够是多种不一样的数据类型,也能够是一个完整的内嵌文档。文档的键是字符串。除了少数例外状况,键可使用任意UTF-8字符。 文档键命名规范: #一、键不能含有\0 (空字符)。这个字符用来表示键的结尾。 #二、.和$有特别的意义,只有在特定环境下才能使用。 #三、如下划线"_"开头的键是保留的(不是严格要求的)。
二、集合就是一组文档。若是将MongoDB中的一个文档比喻为关系型数据的一行,那么一个集合就是至关于一张表数据库
#一、集合存在于数据库中,一般状况下为了方便管理,不一样格式和类型的数据应该插入到不一样的集合,但其实集合没有固定的结构,这意味着咱们彻底能够把不一样格式和类型的数据通通插入一个集合中。 #二、组织子集合的方式就是使用“.”,分隔不一样命名空间的子集合。 好比一个具备博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors,这是为了使组织结构更清晰,这里的blog集合(这个集合甚至不须要存在)跟它的两个子集合没有任何关系。 在MongoDB中,使用子集合来组织数据很是高效,值得推荐 #三、当第一个文档插入时,集合就会被建立。合法的集合名: 集合名不能是空字符串""。 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。 集合名不能以"system."开头,这是为系统集合保留的前缀。 用户建立的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是由于某些系统生成的集合中包含该字符。除非你要访问这种系统建立的集合,不然千万不要在名字里出现$。
三、数据库:在MongoDB中,多个文档组成集合,多个集合能够组成数据库api
数据库也经过名字来标识。数据库名能够是知足如下条件的任意UTF-8字符串: #一、不能是空字符串("")。 #二、不得含有' '(空格)、.、$、/、\和\0 (空字符)。 #三、应所有小写。 #四、最多64字节。 有一些数据库名是保留的,能够直接访问这些有特殊做用的数据库。 #一、admin: 从身份认证的角度讲,这是“root”数据库,若是将一个用户添加到admin数据库,这个用户将自动得到全部数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出全部数据库或关闭服务器 #二、local: 这个数据库永远都不能够复制,且一台服务器上的全部本地集合均可以存储在这个数据库中 #三、config: MongoDB用于分片设置时,分片信息会存储在config数据库中
四、强调:把数据库名添加到集合名前,获得集合的彻底限定名,即命名空间安全
例如: 若是要使用cms数据库中的blog.posts集合,这个集合的命名空间就是 cmd.blog.posts。命名空间的长度不得超过121个字节,且在实际使用中应该小于100个字节
经过下图实例,咱们也能够更直观的了解Mongo中的一些概念:服务器
首先刚安装完成的mongodb数据库是没用用户的,没有username和password,链接时直接默认链接便可工具
直接链接便可,会出现以下结构的数据库post
固然,自动生成的都是System的数据库,咱们本身建立的数据库是以下结构
关于权限的默认配置
在默认状况下,mongod是监听在0.0.0.0之上的,任何客户端均可以直接链接27017,且没有认证。这样作的好处是,用户能够即时上手,不用担忧被一堆配置弄的心烦意乱。然而坏处也是显而易见,若是直接在公网服务器上如此搭建MongoDB,那么全部人均可以直接访问并修改数据库数据了。
默认状况下,mongod也是没有管理员帐户的。所以除非你在admin数据库中使用db.createUser()命令添加了管理员账号,且使用–auth参数启动mongod,不然在数据库中任何人均可以无需认证执行全部命令。包括delete和shutdown。
此外,mongod还会默认监听28017端口,一样是绑定全部ip。这是一个mongod自带的web监控界面。从中能够获取到数据库当前链接、log、状态、运行系统等信息。若是你开启了–rest参数,甚至能够直接经过web界面查询数据,执行mongod命令。
其实MongoDB自己有很是详细的安全配置准则,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这自己的策略就是偏向易用性的,对于安全性,则得靠边站了。
2、MongoDB用户类型
MongoDB的用户分为两种,一种是admin用户,另外一种是特定数据库用户。admin用户拥有最高的权限,而特定数据库用户则只能访问特定的数据库。当MongoDB的admin库里没有任何用户的时候,也就是说整个MongoDB没有一个MongoDB用户的时候,即使–auth权限需求打开了,用户仍是能够经过localhost界面进入MongoDB进行用户设置,不然的话整个MongoDB就彻底无法访问了。而当这个用户建立完成以后,以后的用户登陆和操做就须要受权了,不是直接登陆就能使用的了。
MongoDB有一个比较奇怪的设置是,即使是一个admin用户,受权也必须在admin数据库下进行,而不能在其余数据库下进行。而受权以后admin用户就能够在任何数据库下进行任何操做了。固然数据库级别的用户在他本身的数据库下受权以后是不能到其余数据库进行操做的。举例来讲:
> use test
> db.auth(“someAdminUser”, password)
操做失败,提示尚未在admin数据库下对afmin用户进行受权。
http://www.cnblogs.com/linhaifeng/articles/8273498.html#_label4
http://www.cnblogs.com/linhaifeng/articles/8273498.html#_label5