MongoDB資料類型

來源:互聯網
上載者:User

標籤: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" }

  注意點:

  1. 文檔中的鍵/值對是有序的。
  2. 文檔中的值不僅可以是在雙引號裡面的字串,還可以是其他幾種資料類型(甚至可以是整個嵌人的文檔)。
  3. MongoDB區分類型和大小寫。
  4. MongoDB的文檔不能有重複的鍵。
  5. 文檔的鍵是字串。除了少數例外情況,鍵可以使用任意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資料類型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.