Chương này giới thiệu cách Golang diễn đạt cấu trúc dữ liệu JSON của MongoDB. Như chúng ta đều biết, dữ liệu và điều kiện truy vấn MongoDB được mô tả bằng cấu trúc JSON. Vậy, làm thế nào chúng ta có thể diễn đạt các cấu trúc JSON này trong ngôn ngữ Go?
Gói bson
Trình điều khiển chính thức của ngôn ngữ Go được cung cấp bởi MongoDB có một gói bson, bao gồm một số cấu trúc dữ liệu để mô tả dữ liệu JSON.
Gói bson:
go.mongodb.org/mongo-driver/bson
Kiểu bson.D được sử dụng để mô tả mảng khóa-giá trị theo thứ tự, thường được sử dụng để diễn đạt các biểu thức truy vấn MongoDB và dữ liệu JSON.
Định nghĩa:
// Mảng khóa-giá trị
type D [] E
// Cấu trúc khóa-giá trị
type E struct {
Key string
Value interface{}
}
Ví dụ về biểu thức truy vấn:
bson.D{{"qty", bson.D{{"$lt", 30}}}}
Biểu thức tương đương:
{"qty": {"$lt": 30} }
Ví dụ về dữ liệu tài liệu:
bson.D{
{"item", "journal"},
{"qty", 25},
{"size", bson.D{
{"h", 14},
{"w", 21},
{"uom", "cm"},
}},
{"status", "A"},
}
JSON tương đương:
{
"item": "journal",
"qty": 25,
"size": {
"h": 14,
"w": 21,
"uom": "cm"
},
"status": "A"
}
Kiểu bson.A được sử dụng để định nghĩa các mảng JSON.
Định nghĩa của mảng JSON:
type A []interface{}
Ví dụ 1:
bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}}
JSON tương đương:
["bar", "world", 3.14159, {"qux": 12345}]
Ví dụ 2:
bson.A{"A", "D"}
JSON tương đương:
["A", "D"]
Kiểu bson.M được sử dụng để mô tả các cặp khóa-giá không theo thứ tự, khác với bson.D, quan tâm đến thứ tự lưu trữ các khóa.
Định nghĩa:
type M map[string]interface{}
Ví dụ:
bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}
JSON tương đương:
{
"foo": "bar",
"hello": "world",
"pi": 3.14159
}