BSON
- BSON是一種二進制序列化格式,用於在 MongoDB 中存儲文檔和進行遠程過程調用
- 跟 JSON 的數據結構很像,但是支持更豐富的數據類型
數據類型
數據類型 | 序號 | 別名 | 備注 |
Double | 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 code with scope | 15 | javascriptWithScope | 4.4 棄用 |
32-bit integer | 16 | int | |
Timestamp | 17 | timestamp | |
64-bit integer | 18 | long | |
Decimal128 | 19 | decimal | |
Min key | -1 | minKey | |
Max key | 127 | maxKey |
序號有什么用?
到時候想通過 $type 來指定某個數據類型的時候可以用序號,而不用敲完整的字符串
可以看到,通過 $type 來指定數據類型的時候,可以用別名,也可以用序號
ObjectId
ObjectId 很小,可能是唯一的,生成速度快,並且有序,ObjectId 值的長度為 12 個字節,包括
- 一個 4 字節的時間戳值,代表 ObjectId 的創建,以 Unix 紀元以來的秒數為單位
- 一個 5 字節的隨機值
- 一個 3 字節遞增計數器,初始化為隨機值
給 _id 添加一個 ObjectId 的好處
- 對存儲 ObjectId 值的 _id 字段進行排序大致相當於按創建時間排序
- 在 mongo shell 中,可以使用 ObjectId.getTimestamp() 方法訪問 ObjectId 的創建時間
ObjectId("60b441609c297cd9d2ecf60f").getTimestamp() ISODate("2021-05-31T01:52:32Z")
String
- BSON 字符串是UTF-8
- 在序列化和反序列化 BSON 時,每種編程語言的驅動程序都會從該語言的字符串格式轉換為 UTF-8
- 這使得在 BSON 字符串可以輕松存儲大多數國際字
- 此外,MongoDB $regex 查詢在 regex 字符串中支持 UTF-8
Timestamps
- BSON 有一個特殊的時間戳類型供內部 MongoDB 使用,並且與常規 Date 類型無關
- 此內部時間戳類型是一個 64 位值
- 前 32 位是 time_t 值(至 1970 年依賴的秒數),后 32 位是給定秒內操作的遞增序數
- 在單個 mongod 實例中,時間戳值始終是唯一的
new Timestamp()
在插入包含具有空時間戳值的頂級字段的文檔時,MongoDB將用當前時間戳值替換空時間戳值
db.myNewCollection1.insert({test:new timestamp()}) db.myNewCollection1.find() { "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }
Date
BSON Date 是一個 64 位整數,表示自 Unix 紀元(1970 年 1 月 1 日)以來的毫秒數
在 shell 構造一個 date
var mydate1 = new Date()
在 mongo shell 中使用 ISODate() 構造函數構造一個 Date
var mydate2 = ISODate()
兩種函數構造的 Date,值是同個類型的
以字符串形式返回日期值
mydate1.toString()
返回日期值的月份部分
月是零索引,因此一月是月0
mydate1.getMonth()
不同 BSON 數據類型的比較順序
- MinKey (internal type)
- Null
- Numbers (ints, longs, doubles, decimals)
- Symbol, String
- Object
- Array
- BinData
- ObjectId
- Boolean
- Date
- Timestamp
- Regular Expression
- MaxKey (internal type)
后續再展開講