Эта глава знакомит с тем, как Golang выражает структуру данных JSON в MongoDB. Как известно, данные и условия запросов MongoDB описываются с использованием структур JSON. Так как же можно выразить такие JSON-структуры на языке Go?
Пакет bson
Официальный драйвер языка Go, предоставленный MongoDB, предлагает пакет bson, который включает несколько структур данных для описания JSON.
Пакет 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
}