一.術語說明
1.document是mongoDB中資料的基本單元,非常類似於關係型資料庫管理系統中的行(但是比行要複雜的多)。
2.collection可以看成是沒有模式的表。
3.mongoDB單個執行個體可以容納多個獨立的database,每一個都有自己的集合和許可權。
4.mongoDB內建簡潔但是功能強大的javascript shell,這個工具對於管理mongoDB執行個體和操作資料作用很大。
5.每個document都有一個特殊的鍵“_id”,他在文檔所處的集合中是唯一的。
二.document
1.document的key-value是有序的。例如:{“foo”:"3","greeting":"hello"}和{“greeting”:"hello","foo":"3"}是不同的。
2.key不能包含有\0(Null 字元串).和$有特殊的意義,_開頭的鍵是保留的。
3.mongoDB的document不能含有重複的key。
三.collection
1.collection就是一組文檔。mongoDB中的document類似於RDBMS中的行,那麼collection就是表。
2.無模式
也就是說一個collection中的document結構不一樣。同時可以是一個key-value,也可以有多個key-value組成的document。
Q:在這種情況下,既然一個collection中可以儲存各種各樣的document,哪還有必須要在實際的項目中,建立多個collection嗎?把所有的document放在一個collection中不就可以了?
A:(1)把各種各樣的document都混在一個collection中,不僅對開發人員來還是管理者來說都是噩夢。開發人員要麼確保每次執行查詢的時候只返回需要的種類,要麼讓執行查詢的應用程式來處理所有不同類型的文檔。如果查詢部落格還要剔除那些含有作者資料
(2)在一個集合裡面查詢特定的文檔在速度很不划算,分開做多個collection要快得多。
(3)把同種類型的文檔放在一個collection中,這樣資料會更加的集中。從只含有部落格文章的collection裡面查詢幾篇文章,會從比含有作者和文章資料的集合裡面要少消耗磁碟尋道操作。
(4)當建立索引的時候,文檔會有附加的結構(尤其是唯一索引的時候)。索引是按照集合來定義的,把同種類型的文檔放在同一個collection中,可以使索引更加的有效。
3.
集合名可以是滿足下列條件的任意UTF-8字串
集合名不能是Null 字元串“”
集合名不能含有\0字元(Null 字元),這個字元表示集合名的結尾
集合名不能以“system.”開頭,這是為系統集合保留的首碼。例如system.users這個集合儲存著資料庫的使用者資訊。
使用者建立的集合名字不能含有保留字元$.
子集合
組織集合的一種慣例是使用"."字元分開的按命名空間劃分的子集合。例如,帶有部落格功能的應用可能包含兩個集合,分別是blog.posts和blog.authors.
這樣做的目的只是為了使組織圖更好些,也就是說blog這個集合(這雷根本就不需要存在)及其子集合沒有任何關係。
GridFS是一種儲存大檔案的協議,使用子集合來隱藏檔的中繼資料,這樣就與內容塊分開了。
Mongodb的web控制台通過子集合的方式將資料群組織在DBTOP部分
在Mongodb中使用子集合來組織資料是很好的方法。
4.資料庫
Mongodb中多個文檔組成集合,同樣多個集合可以組成資料庫。一個Mongodb執行個體可以承載多個資料庫。將一個應用的所有資料都儲存在同一個資料庫中的作法就很好。
和集合一樣,資料庫也通過名字來標識。
不能是Null 字元串("")
不能含有''(空格)、.、$、/、\和\0(Null 字元)
應全部小寫
最多64個位元組
要記住一點,資料庫名最終會變成檔案系統裡的檔案。
有一些資料庫名是保留的
admin
從許可權的角度來看,這是"root"資料庫
local
這個資料永遠不會被複製,可以用來儲存限於本地單台伺服器的任意集合
config
當Mongodb用於分區設定時,config資料庫在內部使用,用於儲存分區的相關資訊。
把資料庫的名字放到集合名前面,得到就是集合的全限定名,成為命名空間。命名空間的長度不得超過121位元組,在實際使用當中應該小於100位元組