この章では、GolangがMongoDBのJSONデータ構造をどのように表現するかを紹介します。皆さんもご存知のように、MongoDBのデータとクエリ条件はJSON構造を使用して記述されます。では、Go言語でどのようにしてこのようなJSON構造を表現することができるのでしょうか?
bsonパッケージ
MongoDBが提供する公式のGo言語ドライバには、JSONデータを記述するためのいくつかのデータ構造が含まれたbsonパッケージがあります。
bsonパッケージ:
go.mongodb.org/mongo-driver/bson
bson.D型は、順序付きのキーと値の配列を記述するために使用され、これはMongoDBのクエリ式とJSONデータを表現する際に一般的に使用されます。
定義:
// キー-バリュー形式の配列
type D [] E
// キー-バリュー構造
type E struct {
Key string
Value interface{}
}
クエリ式の例:
bson.D{{"qty", bson.D{{"$lt", 30}}}}
等価な式:
{"qty": {"$lt": 30} }
ドキュメントデータの例:
bson.D{
{"item", "journal"},
{"qty", 25},
{"size", bson.D{
{"h", 14},
{"w", 21},
{"uom", "cm"},
}},
{"status", "A"},
}
等価なJSON:
{
"item": "journal",
"qty": 25,
"size": {
"h": 14,
"w": 21,
"uom": "cm"
},
"status": "A"
}
bson.Aは、JSON配列を定義するために使用されます。
JSON配列の定義:
type A []interface{}
例1:
bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}}
等価なJSON:
["bar", "world", 3.14159, {"qux": 12345}]
例2:
bson.A{"A", "D"}
等価なJSON:
["A", "D"]
bson.Mは、順序のないキーと値のペアを記述するために使用され、bson.Dとは異なり、キーの保存順序には関心がありません。
定義:
type M map[string]interface{}
例:
bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}
等価なJSON:
{
"foo": "bar",
"hello": "world",
"pi": 3.14159
}