標籤:io ar 使用 sp java 檔案 資料 on 問題
資料類型基礎資料型別 (Elementary Data Type)
MongoDB的檔案儲存體格式為BSON,同JSON一樣支援往其它文檔對象和數組中再插入文檔對象和數組,同時擴充了JSON的資料類型.與資料庫打交道的那些應用。例如,JSON沒有日期類型,這會使得處理本來簡單的日期問題變得非常繁瑣。只有一種數字類型,沒法區分浮點數和整數,更不能區分32位和64位元字。也沒有辦法表示其他常用類型,如Regex或函數。
下面是MongoDB的支援的資料類型:
- null null用於表示空值或者不存在的欄位。 {"x":null}
- 布爾 布爾類型有兩個值‘true‘和‘false1‘. {"X":true}
- 32位整數 類型不可用。JavaScript僅支援64位浮點數,所以32位整數會被自動轉換。
- 64位整數 不支援這個類型。shell會使用一個特殊的內嵌文檔來顯示64位整數,
- 64位浮點數 shell中的數字都是這種類型。下面的表示都是浮點數: {"X" : 3.1415926} {"X" : 3}
- 字串 UTF-8字串都可表示為字串類型的資料: {"x" : "foobar"}
- 符號 不支援這種類型。shell將資料庫裡的符號類型轉換成字串。
- 對象id 對象id是文檔的12位元組的唯一 ID, {"X" :ObjectId() }
- 日期 日期類型儲存的是從標準紀元開始的毫秒數。不儲存時區: {"X" : new Date()}
- Regex 文檔中可以包含Regex,採用JavaScript的Regex文法: {"x" : /foobar/i}
- 代碼 文檔中還可以包含JavaScript代碼:{"x" : function() { /* …… */ }}
- 位元據 位元據可以由任意位元組的串組成。不過shell中無法使用。
- 最大值 BSON包括一個特殊類型,表示可能的最大值。shell中沒有這個類型。
- 最小值 BSON包括一個特殊類型,表示可能的最小值。shell中沒有這個類型。
- 未定義 文檔中也可以使用未定義類型:{"x":undefined}
- 數組 值的集合或者列表可以表示成數組:{"x" : ["a", "b", "c"]}
- 內嵌文檔 文檔可以包含別的文檔,也可以作為值嵌入到父文檔中,資料可以組織得更自然些,不用非得存成扁平結構的:{"x" : {"food" : "noodle"}}
數字
JavaScript中只有一種“數字”類型。因為MongoDB中有3種數字類型(32位整數、64位整數和64位浮點數),shell必須繞過JavaScript的限制。預設情況下,shell中的數字都被MongoDB當做是雙精確度數。這意味著如果你從資料庫中獲得的是一個32位整數,修改文檔後,將文檔存回資料庫的時候,這個整數也被轉換成了浮點數,即便保持這個整數原封不動也會這樣的。所以明智的做法是盡量不要在shell下覆蓋整個文檔。
日期
JavaScript的Date對象用做MongoDB的日期類型,建立一個新的Date對象時,通常會調用new Data("")。
基本概念
下面將按照學習RDMS時先介紹類似行、表、資料庫概念的知識,然後在去學習增刪改查等操作。
1.文檔
文檔是MongoDB中資料的基本單元(類似於關係型資料庫中的行,但是比行要複雜得多)。多個鍵及其關聯的值有序地放置在一起便是文檔。MongoDB的檔案儲存體格式為BSON。
BSON是Binary JSON 的簡稱,是一個JSON文檔對象的二進位編碼格式。BSON同JSON一樣支援往其它文檔對象和數組中再插入文檔對象和數組,同時擴充了JSON的資料類型。如:BSON有Date類型和BinDate類型。BSON有三個特點:輕量性、可遍曆性、高效性
文檔就可以這樣表示:
{ "firstName": "egger", "lastName":"wong" }
注意點:
- 文檔中的鍵/值對是有序的。
- 文檔中的值不僅可以是在雙引號裡面的字串,還可以是其他幾種資料類型(甚至可以是整個嵌人的文檔)。
- MongoDB區分類型和大小寫。
- MongoDB的文檔不能有重複的鍵。
- 文檔的鍵是字串。除了少數例外情況,鍵可以使用任意UTF-8字元。
- 鍵不能含有\0 (Null 字元)。這個字元用來表示鍵的結尾。
- .和$有特別的意義,只有在特定環境下才能使用。
- 以底線"_"開頭的鍵是保留的(不是嚴格要求的)。
2.集合
集合就是一組文檔(類似於關係型資料庫中的表),可以被看做是沒有模式的表。
無模式
集合是無模式的。這意味著一個集合裡面的文檔可以是各式各樣的。例如,下面兩個文檔可以存在於同一個集合裡面:
{"name": "egger"}
{"age":18}
上面的文檔不光是值的類型不同(字串和整數),它們的鍵也是完全不一樣的。
雖然集合裡面可以放置任何文檔,但是推薦使用多個集合:
- 把各種各樣的文檔都混在一個集合裡面,無論對於開發人員還是管理員來說都是噩夢。
- 在一個集合裡面査詢特定類型的文檔在速度上也很不划算,分開做多個集合要快得多。
- 把同種類型的文檔放在一個集合裡,這樣資料會更加集中。
- 當建立索引的時候,文檔會有附加的結構(尤其是有唯一索引的時候)。索引是按照集合來定義的。把同種類型的文檔放入同一個集合裡面,可以使索引更加有效。
命名
我們可以通過名字來標識集合。集合名可以是滿足下列條件的任意UTF-8字串。
- 集合名不能是Null 字元串""。
- 集合名不能含有\0字元(Null 字元),這個字元表示集合名的結尾。
- 集合名不能以"system."開頭,這是為系統集合保留的首碼。
- 使用者建立的集合名字不能含有保留字元$。有些驅動程式的確支援在集合名裡麵包含$,這是因為某些系統產生的集合中包含該字元。除非你要訪問這種系統建立的集合,否則千萬不要在名字裡出現$。
子集合
組織集合的一種慣例是使用"."字元分開的按命名空間劃分的子集合。在MongoDB中使用子集合來組織資料是很好的方法
例如,一個個人資訊可能包含兩個集合,分別是person.name和person.age。這樣做的目的只是為了使組織圖更好些,也就是說person這個集合(這雷根本就不需要存在)及其子集合沒有任何關係。把資料庫的名字放到集合名前面,得到就是集合的完全限定名,稱為命名空間。命名空間的長度不得超過121位元組,在實際使用當中應該小於100位元組。
很多MongoDB工具中都包含子集合。
- GridFS是一種儲存大檔案的協議,使用子集合來隱藏檔的中繼資料,這樣就與內容塊分開了
- MongoDB的Web控制台通過子集合的方式將資料群組織在DBTOP部分.
- 絕大多數驅動程式都提供文法糖,為訪問指定集合的子集合提供方便。
3.資料庫
MongoDB中多個集合可以組成資料庫。MongoDB的單個執行個體可以容納多個獨立的資料庫,每一個都有自己的集合和許可權,不同的資料庫也放置在不同的檔案中。
資料庫也通過名字來標識。資料庫名可以是滿足以下條件的任意UTF-8字串。
- 不能是Null 字元串("")。
- 不得含有‘ ‘(空格)、.、$、/、\和\0 (空宇符)。
- 應全部小寫。
- 最多64位元組。
有一些資料庫名是保留的,可以直接存取這些有特殊作用的資料庫。
• admin
從許可權的角度來看,這是“root”資料庫。要是將一個使用者添加到這個資料庫,這個使用者自動繼承所有資料庫的許可權。一些特定的伺服器端命令也只能從這個資料庫運行,比如列出所有的資料庫或者關閉伺服器。
• local
這個資料永遠不會被複製,可以用來儲存限於本地單台伺服器的任意集合
• config
當Mongo用於分區設定時,config資料庫在內部使用,用於儲存分區的相關資訊。
MongoDB資料類型