參考MongoDB官網:https://docs.mongodb.com/manual/reference/bson-types/
MongoDB文檔存儲是使用BSON類型,BSON(BSON short for Binary JSON, is a binary-encoded serialization of JSON-like documents)是二進制序列化的形式。類如JSON,同樣支持內嵌各種類型。
Type | Number | Alias | Notes |
---|---|---|---|
Double | 1 | “double” | |
String | 2 | “string” | |
Object | 3 | “object” | |
Array | 4 | “array” | |
Binary data | 5 | “binData” | |
Undefined | 6 | “undefined” | Deprecated. |
ObjectId | 7 | “objectId” | |
Boolean | 8 | “bool” | |
Date | 9 | “date” | |
Null | 10 | “null” | |
Regular Expression | 11 | “regex” | |
DBPointer | 12 | “dbPointer” | Deprecated. |
JavaScript | 13 | “javascript” | |
Symbol | 14 | “symbol” | Deprecated. |
JavaScript (with scope) | 15 | “javascriptWithScope” | |
32-bit integer | 16 | “int” | |
Timestamp | 17 | “timestamp” | |
64-bit integer | 18 | “long” | |
Decimal128 | 19 | “decimal” | New in version 3.4. |
Min key | -1 | “minKey” | |
Max key | 127 | “maxKey” |
重點介紹幾個類型,
ObjectId類型:這是MongoDB生成的類似關系型DB表主鍵的唯一key,生成快速。具體由12個字節組成:
前4個字節是unix秒,3個字節的機器標識符(為了分布式下的主鍵唯一),2個字節的進程id,3個字節的計數器數字
- a 4-byte value representing the seconds since the Unix epoch,
- a 3-byte machine identifier,
- a 2-byte process id, and
- a 3-byte counter, starting with a random value.
MongoDB的設計之初就是要做分布式數據庫。從ObjectId唯一主鍵的生成上,值得分布式系統設計人員參考。
3個字節的機器標識符,表示MongoDB實例所在機器的不同;2個字節的進程id,表示相同機器的不同MongoDB實例。再加上時間戳和隨機數(3個字節隨機數,同一秒上,理論上可以有2^24次個插入),很大程度上保證了ObjectId的唯一性。
String類型:
BSON字符串都是UTF-8編碼。
Timestamps類型:
BSON具有內部MongoDB使用的特殊時間戳類型,並且不與常規Date類型相關聯。 時間戳值是64位值,其中:
第一個32bit是unix時間戳秒;
第二個32bit是當前秒的遞增操作數。
可以保證一個mongod實例下,timestamps總是唯一的。
Date類型:
BSON Date是一個64bit有符號整數,表示自Unix紀元以來的毫秒數(1970年1月1日)。