在 MongoDB 的 Go 語言驅動程式 mongo-go-driver 中,bson.D
與 bson.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 的範例,包含物件與陣列:
// JSON
{"name": "John"}
// BSON
bson.D{{"name", "John"}}
// JSON
{"name": "John", "age": 30, "isMarried": true}
// BSON
bson.D{
{"name", "John"},
{"age", 30},
{"isMarried", true},
}
// JSON
{"name": "John", "address": {"city": "Taipei", "country": "Taiwan"}}
// BSON
bson.D{
{"name", "John"},
{"address", bson.D{
{"city", "Taipei"},
{"country", "Taiwan"},
}},
}
// JSON
["apple", "banana", "cherry"]
// BSON
bson.A{"apple", "banana", "cherry"}