MongoDB(6)- BSON 數據類型


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 值的長度為 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

 

  • 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) }

 

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 數據類型的比較順序

  1. MinKey (internal type)
  2. Null
  3. Numbers (ints, longs, doubles, decimals)
  4. Symbol, String
  5. Object
  6. Array
  7. BinData
  8. ObjectId
  9. Boolean
  10. Date
  11. Timestamp
  12. Regular Expression
  13. MaxKey (internal type)

后續再展開講

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM