首先推薦一款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