在 MongoDB 的 Go 語言驅動程式 mongo-go-driver 中,bson.Dbson.A 都是結構體型別,用於表示 BSON(Binary JSON) 格式的文件或子文件。其中,D 代表「document」,用於表示一個 BSON 文件;A 代表「array」,用於表示一個 BSON 子文件(也就是 BSON 文件中的陣列)。

type D [] E

type E struct {
    Key string
    Value interface{}
}

type A []interface{}

具體來說,bson.D 用於表示一個有序的 BSON 文件,其中每個元素都由一個名稱和一個值(或子文件)組成,例如:

bson.D{
    {"name", "Alice"},
    {"age", 30},
    {"address", bson.D{
        {"city", "Taipei"},
        {"country", "Taiwan"},
    }},
}

而 bson.A 則用於表示一個有序的 BSON 子文件(陣列),其中每個元素都只有一個值(或子文件),例如:

bson.A{
    "apple",
    "banana",
    bson.D{
        {"name", "orange"},
        {"quantity", 3},
    },
}

在以上範例中,bson.D 和 bson.A 都是有序的,也就是表示的 BSON 文件中的元素是有順序的。另外需要注意的是,BSON 格式與 JSON 格式非常相似,因此這些用法可以讓我們在 Go 程式中方便地表示 MongoDB 中的文件和子文件。

以下是幾個常見的 JSON 對應 BSON 的範例,包含物件與陣列:

  1. 單一屬性的 JSON 對應 BSON
// JSON
{"name": "John"}

// BSON
bson.D{{"name", "John"}}
  1. 多個屬性的 JSON 對應 BSON
// JSON
{"name": "John", "age": 30, "isMarried": true}

// BSON
bson.D{
    {"name", "John"},
    {"age", 30},
    {"isMarried", true},
}
  1. 嵌套物件的 JSON 對應 BSON
// JSON
{"name": "John", "address": {"city": "Taipei", "country": "Taiwan"}}

// BSON
bson.D{
    {"name", "John"},
    {"address", bson.D{
        {"city", "Taipei"},
        {"country", "Taiwan"},
    }},
}
  1. 陣列的 JSON 對應 BSON

// JSON
["apple", "banana", "cherry"]

// BSON
bson.A{"apple", "banana", "cherry"}
  1. 嵌套陣列的 JSON 對應 BSON