標籤:blog http 使用 os 資料 ar 問題 div
前言
工欲善其事必先利其器。在學習MongoDB之前,需要對MongoDB的一些基本概念有系統的瞭解。
所以,本篇文章主要介紹MongoDB的一些基本概念,這些概念的定義均來自《MongoDB權威指南》,關於此書想要瞭解更多,請點擊此處。
我盡量使用最簡潔的語言來儘可能完整地描述這些基本概念,如有遺漏或不妥之處歡迎指正。
文檔
文檔是MongoDB的核心概念之一。多個索引值對有序地放在一起便是文檔。例如:
{"name":"Jerry","score":80}
這個文檔有2個索引值對,一個是name,其對應的值為"Jerry",另一個是score,其對應的值為“80”。
文檔中的索引值對是有序的,上面的文檔和下面的文檔是完全不同的:
{"score":80,"name":"Jerry"}
文檔中的值不僅可以是雙引號中的字串,也可以是數值,比如上面文檔中的score,還可以是其他幾種資料類型,甚至可以是整個嵌入的文檔(會在後續文章中介紹)。
MongoDB不單區分類型,也區分大小寫,下面2個文檔是不同的:
{"score":80}
{"score":"80"}
下面2個文檔也是不同的:
{"score":80}
{"Score":80}
另一個需要注意的地方是,文檔中的鍵不能重複,例如下面的文檔是不符合規定的:
{"name":"Jerry","score":80,"score":90}集合
集合也是MongoDB的核心概念之一。集合就是一組文檔。如果說文檔類似於關係型資料庫的記錄的話,那集合就類似於關係型資料庫的表。
集合中的文檔可以是多式多樣的,例如下面的2個文檔可以同屬於一個集合:
{"name":"長安亂","press":"春風文藝出版社","date":"2004-08-01"}{"author":"韓寒"}
根據文檔的概念,我們知道文檔中的鍵是不能重複的,那集合中的文檔是否可以重複?
答案是肯定的,集合中可以放置任意的文檔,例如下面的集合是完全符合規定的:
{"name":"長安亂","press":"春風文藝出版社","date":"2004-08-01"}{"name":"長安亂","press":"春風文藝出版社","date":"2004-08-01"}
因為集合中可以放置任意的文檔,那隨之而來一個問題,還有必要使用多個集合嗎?
答案也是肯定的,理由如下:
-
把各種各樣的文檔都混在一個集合裡面,無論對於開發人員還是管理員來說都是噩夢。開發人員要麼確保每次查
詢只返回需要的文件類型,要麼讓執行查詢的應用程式來從這些文檔中篩選出所需要的類型。如果查詢書的
名字還要剔除那些含有作者資料的文檔,就很令人惱火。
-
在一個集合裡面查詢特定類型的文檔在速度上也很不划算,分開做多個集合要快得多。
從只含書籍資訊的集合中查詢出幾本書,要比從含有書和作者資訊的集合中查詢消耗更少的磁碟尋道操作。
-
當建立索引的時候,文檔會有附加的結構(尤其是有唯一索引的時候)。索引是按照集合來定義的,把同種類
型的文檔放入同一個集合裡面,可以使索引更加有效。
以上3點理由摘自《MongoDB權威指南》,並稍作了修改。
子集合
在集合的命名中引入"."來組織集合是一個慣例,例如blog.posts和blog.authors,posts和authors可以看作blog的子集合,這裡blog本身可以是一個集合,也可以根本就不存在。
資料庫
MongoDB中多個文檔組成集合,同樣多個集合可以組成資料庫。一個MongoDB執行個體可以承載多個資料庫,它們之間可視為完全獨立的。
在對資料庫命名的時候,應避免使用以下被保留的資料庫名:
從許可權的角度來看,這是一個“root"資料庫。如果將一個使用者添加到這個資料庫,這個使用者就自動繼承所有資料庫的許可權。一些特定的伺服器端命也只能從這個資料庫運行,比如列出所有的資料庫或關閉伺服器。
這個資料庫永遠不會被複製,可以用來儲存限於本地單台伺服器的任意集合。
當Mongo用於分區設定時,config資料庫在內部使用,用於儲存分區的相關資訊。
把資料庫的名字放到集合名稱之前,就得到集合的完全限定名,稱為命名空間。例如cms資料庫中的集合blog.posts的命名空間為cms.blog.posts。