MongoDB入門教程三[資料類型]

來源:互聯網
上載者:User

標籤:

MongoDB的文檔使用BSON(Binary JSON)來組織資料,BSON類似於JSON,JSON只是一種簡單的表示資料的方式,只包含了6種資料類型(null、布爾、數字、字串、數組及對象),不能完全滿足複雜業務的需要,因此,BSON還提供日期、32位元字、64位元字等類型。以下對mongoDB的類型進行簡要說明: 1、 Null[類型編號:10]null類型用於表示空值或不存在的欄位,如:{“x”:null} 2、 布爾類型 Boolean[類型編號:8]布爾類型有兩上值,’true’和’false’ ,如:{“x”:true} 3、 32位整數 32-bit integer[類型編號:16]在由於mongoDB的控制台使用JS引擎進行輸入,而JS僅支援64位浮點數,所以32位整數將會被自動轉義; 4、 64位整數 64-bit integer[類型編號:18]64位整數與32位整數一樣,在MongoDB控制台使用時,會轉義成64位浮點數。除外,如果資料庫本身儲存的資料類型無論是32位整數還是64位整數,使用MongoDB控制台擷取後,更改其文檔記錄(即使沒有修改整數本身,只修改了文檔的其他部分),並重新使用控制台寫回資料庫,則其資料類型也會變成了64位浮點數。除外,使用控制台查看一個64位整數時,可能會不正確定,原因是有些64位的整數不能精確表示為64位浮點數,而控制台呈示都是64位浮點數。 5、 數實值型別:Double[類型編號:1]

在Mongo shell中,預設使用64位浮點型資料。因此,會有以下兩種數值形式:

{"x" : 2.32}//或{"x" : 2}

對於整數類型,可以使用NumberInt()(位有符號整型)或NumberLong()(8位有符號整型)方法進行轉換。樣本如下:

{"x" : NumberInt(2)}{"x" : NumberLong(2)}
 6、 字串類型:String[類型編號:2]MongoDB中字串類型使用UTF-8編碼的字元表示。如:{“x”:”Hello QuickCodes”} 7、 符號 Symbol [類型編號:14]在MongoDB控制台中不支援這種類型,將自動轉義成字串; 8、 對象id Object id[類型編號:7]對象id是文檔中唯一的12位的ID ,在MongoDB來儲存文檔時,必須有一個“_id”鍵,這個鍵可以是任何類型,如果在增加文檔時,沒有這個_id鍵,則系統會使用ObjectId對象自動產生一個,在分布式環境中,不同的機器都能用全域唯一的同種方法來產生值,如:{"_id": ObjectId("57110709d1db0802a433a03c")}
其建置規則為:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11     時間戳記     |     機器   |   PID |    計數器前4位表示時間戳記,時間戳記以秒為單位,由於時間戳記在前面,可以更好地反映出資料插入時的時間順序,使的資料更容易查詢,建議索引更加容易。雖然系統會自動建立_id鍵,但在高並發的應用下建議使用用戶端的驅動程式來建立,主要原因是,儘管ObjectId可以產生,但是系統在產生時,還是會產生開銷,增加資料庫的負擔。在高並發的分布式環境中,只使用以秒為單位的時間戳記和機器不能區分其唯一性,故在其後面添加了PID,即MongoDB的進程標識符,前9個字元保證了同一秒鐘不同機器不同進程產生的ObjectId是唯一,兩位是一個自動遞增的計數器,確保相同進程同一秒產生的ObjectId也不一樣。

相關函數:ObjectId()、getTimestamp()、valueOf()

 9 日期 Date [類型編號:9]MongoDB中日期使用時間戳表示,單位為毫秒,不儲存時區。 從標準紀元開始的毫秒數 { “date”:new Date()}建立日期對象時應該使用new Date(),而非建構函式Date()。將建構函式作為函數時返回的日期格式是字串,而非日期對象(與JavaScript工作機制有關)。
  • MongoDB中,日期類型是一個64位的整數,它代表的是距Unix epoch的毫秒數
  • MongoDB在儲存時間時,先轉化為UTC時間

                            北京時間(CST) = UTC + 8個小時

  • MongoDB Shell中可以使用new Date或ISODate來建立時間對象,在進行顯示時,Shell會根據本地時間去設定顯示日期對象
10 Regex Regular Expression[類型編號:11]文檔中可以包含Regex,遵循 JavaScript 的文法。主要用於查詢,使用Regex作為限定條件

例如:{name:/foo/  }    name欄位含有foo的文檔

         {name:/foo/i }    name欄位含有foo的文檔,且不區分大小寫

         {name:/^foo/i }  name欄位以foo開頭,且不區分大小寫

 

11 代碼 JavaScript(Scope)[類型編號:15]MongoDB的文檔和代碼中可以包括JavaScript代碼。如:
{"x" : function(){ /*這裡是一段JavaScript代碼*/}}
 12位元據 Binary data[類型編號:5]可以儲存由任意位元組組成的字串,例如:圖片、視頻等。任意位元組的二進位串組成, shell 不支援 。位元據是一個二進位位元組的字作串,要儲存非UTF-8字元到資料庫中,只能使用十進位資料。 13 最大值 Max Key [類型編號:127]表示可能的最大值, shell 不支援 14 最小值 Min Key[類型編號:255]表示可能的最小值, shell 不支援 15 未定義 undefined{ “x”: undefined} 16 數組 Array[類型編號:4]資料集可以用數組格式儲存,與JavaSript中的數組表示相同。如:
{"x" : ["cloudev.top", "QuickCodes.Net"]}
數組中可以包含不同類型的資料元素,包括內嵌文檔和數組等。所有MongoDB中鍵-值對支援的資料類型都可以用做數組的值。
  • 數組是使用方括弧來表示的一組值,它既可以作為有序對象(列表、棧、隊列),也能作為無序對象(如集合)來操作  
  • 數組中可以包含不同資料類型的元素(字串、浮點數、文檔等)                 例如:[ 3.14,"hello",[1,2,3] ,{"key":"MongoDB"} ]
  • 針對數組MongoDB提供了許多特定的操作符,例如:$push,$pop,$pull,$slice,$addToSet等
  • MongoDB 可自動的為數組元素建立Multikey 索引
 17內嵌文檔文檔可以作為文檔中某個 key 的value。在MongoDB文檔總大小限制為16MB,建議使用子文檔的形式組織資料,子文檔查詢效率要高於多鍵查詢。

{

       "_id": ObjectId("57110709d1db0802a433a03c"),

      title:"Hello QuickCodes",

      author:"Mac.Manon",

      comments:[

       {nickname:"Peter",comment:"Ok"},

       {nickname:"Tom",comment:"Dig"} ]

}

文檔可以做為鍵的值,即:內嵌文檔。MongoDB與關係型資料庫相比,最大的優勢就是內嵌文檔。與關係型資料庫的扁平化資料結構相比,使用內嵌文檔可以資料的組織方式更加自然。

 

 18.時間戳記 Timestamp [類型編號:17]

時間戳記類型有兩部分組成:32 bit-Unix epoch 和 32 bit-自增序數(同一秒)

Timestmp 只供MongoDB 資料庫服務內部使用,用於記錄操作的詳細時間;

Timestamp 類型和Date類型是沒有關係的,對於我們來說使用更多的Date類型;

相關函數:Timestamp()

  上述資料類型,均有一個類型編號,如字串型的類型編號為2,下面的指令會在user表尋找欄位名稱為name,且資料儲存為字串格式的資料:

db.user.find({name:{$type:2}})

 

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.