認識 MongoDB 資料庫的 BSON 資料交換格式

前言

BSON 是一種電腦資料交換格式,主要被用做 MongoDB 資料庫中的資料儲存和網路傳輸格式。它是一種二進位表示形式,能用來表示簡單資料結構、關聯陣列(MongoDB 中稱為「物件」或「文件」),以及 MongoDB 中的各種資料類型。BSON 之名緣於 JSON,含義為 Binary JSON(二進位 JSON)。

文件結構

MongoDB 的文件(documents)由鍵值對(field-and-value pairs)組成。

1
2
3
4
5
6
7
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

欄位值可以是任何 BSON 資料型別,例如:

1
2
3
4
5
6
7
8
var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
  • _id 欄位為 ObjectId 型別。
  • name 欄位為包含 first 和 last 欄位的文件型別。
  • birth 欄位和 death 欄位為 Date 型別。
  • contrib 欄位為字串陣列型別。
  • views 欄位為 NumberLong 型別。

欄位名

文件的欄位名包含以下限制:

  • _id 做為保留欄位,當作主鍵,其值必須唯一、不可變,可以是除了陣列之外的任何型別。
  • 不可以是 null 字串。
  • 不可以包含 $. 字元。

文件限制

最大的 BSON 格式文件大小為 16MB。

資料型別

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 code with scope 15 “javascriptWithScope” Deprecated in MongoDB 4.4.
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”

參考資料