JSON
JSON是一種簡單的數據表示方式,它易於理解、易於解析、易於記憶。但從另一方面來說,因為只有null、布爾、數字、字符串、數組和對象這幾種數據類型,所以JSON有一定局限性。例如,JSON沒有日期類型,JSON只有一種數字類型,無法區分浮點數和整數,更別說區分32為和64位數字了。再者,JSON無法表示其他一些通用類型,如正則表達式或函數。
BSON
BSON(Binary Serialized Document Format)是一種類JSON的二進制形式的存儲格式,簡稱Binary JSON。它和JSON一樣,支持內嵌的文檔對象和數組對象,但是BSON有JSON沒有的一些數據類型,如Date和BinData類型。它支持下面數據類型。每個數據類型對應一個數字,在MongoDB中可以使用$type操作符查看相應的文檔的BSON類型
類型 | 對應數字 | 別名 | 說明 |
Double1 | 1 | double | |
String | 2 | string | |
Object | 3 | object | |
Array | 4 | array | |
Binary data | 5 | binData | |
Undefined | 6 | undefined | 棄用 |
ObjectId | 7 | objectId | |
Boolean | 8 | “bool” | |
Date | 9 | “date” | |
Null | 10 | “null” | |
Regular Expression | 11 | “regex” | |
DBPointer | 12 | “dbPointer” | |
JavaScript | 13 | “javascript” | |
Symbol | 14 | “symbol” | |
JavaScript(with scope) | 15 | “javascriptWithScope” | |
32-bit integer | 16 | “int” | |
Timestamp | 17 | “timestamp” | |
64-bit integer | 18 | “long” | |
Min key | -1 | “minKey” | |
Max key | 127 | “maxKey” |
基本數據類型
null:用於表示空值或者不存在的字段,{“x”:null}
布爾型:布爾類型有兩個值true和false,{“x”:true}
數值:shell默認使用64為浮點型數值。{“x”:3.14}或{“x”:3}。對於整型值,可以使用NumberInt(4字節符號整數)或NumberLong(8字節符號整數),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
字符串:UTF-8字符串都可以表示為字符串類型的數據,{“x”:“呵呵”}
日期:日期被存儲為自新紀元依賴經過的毫秒數,不存儲時區,{“x”:new Date()}
正則表達式:查詢時,使用正則表達式作為限定條件,語法與JavaScript的正則表達式相同,{“x”:/[abc]/}
數組:數據列表或數據集可以表示為數組,{“x”: [“a“,“b”,”c”]}
內嵌文檔:文檔可以嵌套其他文檔,被嵌套的文檔作為值來處理,{“x”:{“y”:3 }}
對象Id:對象id是一個12字節的字符串,是文檔的唯一標識,{“x”: objectId() }
二進制數據:二進制數據是一個任意字節的字符串。它不能直接在shell中使用。如果要將非utf-字符保存到數據庫中,二進制數據是唯一的方式。
代碼:查詢和文檔中可以包括任何JavaScript代碼,{“x”:function(){/*…*/}}
BSON 與 MongoDB 的關系
BSON是用於存儲MongoDB【文檔】的一種文檔格式。驅動程序在使用【文檔】進行插入、查詢或其他操作時。會先將【文檔】編碼成BSON格式,然后發送給服務器。同樣地,服務器將文檔返回客戶端時,也是已BSON格式進行的。驅動程序先對此BSON進行解碼然后再傳送給客戶端。因此,BSON與MongoDB的關系為:MongoDB利用BSON格式存儲數據和傳輸數據