[轉載]MongoDB學習(二):數據類型和基本概念

數據類型

基本數據類型

  MongoDB的文件存儲格式爲BSON,同JSON同樣支持往其它文檔對象和數組中再插入文檔對象和數組,同時擴展了JSON的數據類型.與數據庫打交道的那些應用。例如,JSON沒有日期類型,這會使得處理原本簡單的日期問題變得很是繁瑣。只有一種數字類型,無法區分浮點數和整數,更不能區分32位和64位數字。也沒有辦法表示其餘經常使用類型,如正則表達式或函數。html

  下面是MongoDB的支持的數據類型:web

  • 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()}
  • 正則表達式  文檔中能夠包含正則表達式,採用JavaScript的正則表達式語法: {"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("")。shell

 

 

基本概念

下面將按照學習RDMS時先介紹相似行、表、數據庫概念的知識,而後在去學習增刪改查等操做。數據庫

1.文檔

  文檔是MongoDB中數據的基本單元(相似於關係型數據庫中的行,可是比行要複雜得多)。多個鍵及其關聯的值有序地放置在一塊兒即是文檔。MongoDB的文件存儲格式爲BSON。數組

  BSON是Binary JSON 的簡稱,是一個JSON文檔對象的二進制編碼格式。BSON同JSON同樣支持往其它文檔對象和數組中再插入文檔對象和數組,同時擴展了JSON的數據類型。如:BSON有Date類型和BinDate類型。BSON有三個特色:輕量性、可遍歷性、高效性服務器

  文檔就能夠這樣表示:
  { "firstName": "egger", "lastName":"wong" }函數

  注意點:工具

  1. 文檔中的鍵/值對是有序的。
  2. 文檔中的值不只能夠是在雙引號裏面的字符串,還能夠是其餘幾種數據類型(甚至能夠是整個嵌人的文檔)。
  3. MongoDB區分類型和大小寫。
  4. MongoDB的文檔不能有重複的鍵。
  5. 文檔的鍵是字符串。除了少數例外狀況,鍵可使用任意UTF-8字符。
  • 鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
  • .和$有特別的意義,只有在特定環境下才能使用。
  • 如下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。

2.集合

  集合就是一組文檔(相似於關係型數據庫中的表),能夠被看作是沒有模式的表。學習

  無模式

  集合是無模式的。這意味着一個集合裏面的文檔能夠是各式各樣的。例如,下面兩個文檔能夠存在於同一個集合裏面:
  {"name": "egger"}
  {"age":18}

  上面的文檔不光是值的類型不一樣(字符串和整數),它們的鍵也是徹底不同的。

  雖然集合裏面能夠放置任何文檔,可是推薦使用多個集合:

  • 把各類各樣的文檔都混在一個集合裏面,不管對於開發者仍是管理員來講都是噩夢。
  • 在一個集合裏面査詢特定類型的文檔在速度上也很不划算,分開作多個集合要快得多。
  • 把同種類型的文檔放在一個集合裏,這樣數據會更加集中。
  • 當建立索引的時候,文檔會有附加的結構(尤爲是有惟一索引的時候)。索引是按照集合來定義的。把同種類型的文檔放入同一個集合裏面,可使索引更加有效。 

  命名

  咱們能夠經過名字來標識集合。集合名能夠是知足下列條件的任意UTF-8字符串。

  • 集合名不能是空字符串""。
  • 集合名不能含有\0字符(空字符),這個字符表示集合名的結尾。
  • 集合名不能以"system."開頭,這是爲系統集合保留的前綴。
  • 用戶建立的集合名字不能含有保留字符,這是由於某些系統生成的集合中包含該字符。除非你要訪問這種系統建立的集合,不然千萬不要在名字裏出現$。 

  子集合

  組織集合的一種慣例是使用"."字符分開的按命名空間劃分的子集合。在MongoDB中使用子集合來組織數據是很好的方法

  例如,一個我的信息可能包含兩個集合,分別是person.name和person.age。這樣作的目的只是爲了使組織結構更好些,也就是說person這個集合(這裏根本就不須要存在)及其子集合沒有任何關係。把數據庫的名字放到集合名前面,獲得就是集合的徹底限定名,稱爲命名空間。命名空間的長度不得超過121字節,在實際使用當中應該小於100字節。

  不少MongoDB工具中都包含子集合。

  • GridFS是一種存儲大文件的協議,使用子集合來存儲文件的元數據,這樣就與內容塊分開了
  • MongoDB的Web控制檯經過子集合的方式將數據組織在DBTOP部分.
  • 絕大多數驅動程序都提供語法糖,爲訪問指定集合的子集合提供方便。

3.數據庫

  MongoDB中多個集合能夠組成數據庫。MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。

  數據庫也經過名字來標識。數據庫名能夠是知足如下條件的任意UTF-8字符串。

  • 不能是空字符串("")。
  • 不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
  • 應所有小寫。
  • 最多64字節。

  有一些數據庫名是保留的,能夠直接訪問這些有特殊做用的數據庫。

• admin
從權限的角度來看,這是「root」數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承全部數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,好比列出全部的數據庫或者關閉服務器。
• local
這個數據永遠不會被複制,能夠用來存儲限於本地單臺服務器的任意集合
• config
當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息。

 

原文地址:http://www.cnblogs.com/egger/archive/2013/04/27/3047191.html

相關文章
相關標籤/搜索