Ten rozdział prezentuje sposób, w jaki Golang wyraża strukturę danych JSON w MongoDB. Jak wiemy, dane MongoDB i warunki zapytań opisane są za pomocą struktur JSON. Jak zatem możemy wyrazić takie struktury JSON w języku Go?

Pakiet bson

Oficjalny sterownik języka Go dostarczany przez MongoDB oferuje pakiet bson, który zawiera kilka struktur danych do opisywania danych JSON.

Pakiet bson: go.mongodb.org/mongo-driver/bson

Typ bson.D służy do opisywania uporządkowanych tablic klucz-wartość, które są powszechnie używane do wyrażania warunków zapytań MongoDB i danych JSON.

Definicja:

// Tablica klucz-wartość
type D [] E

// Struktura klucz-wartość
type E struct {
    Klucz   string
    Wartość interface{}
}

Przykład wyrażenia zapytania:

bson.D{{"qty", bson.D{{"$lt", 30}}}}

Równoważne wyrażenie:

{"qty": {"$lt": 30} }

Przykład danych dokumentu:
```go
bson.D{
    {"item", "journal"},
    {"qty", 25},
    {"size", bson.D{
        {"h", 14},
        {"w", 21},
        {"uom", "cm"},
    }},
    {"status", "A"},
}

Równoważny JSON:

{
    "item": "journal",
    "qty": 25,
    "size": {
        "h": 14,
        "w": 21,
        "uom": "cm"
    },
    "status": "A"
}

Typ bson.A służy do definiowania tablic JSON.

Definicja tablicy JSON:

type A []interface{}

Przykład 1:

bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}}

Równoważny JSON:

["bar", "world", 3.14159, {"qux": 12345}]

Przykład 2:

bson.A{"A", "D"}

Równoważny JSON:

["A", "D"]

Typ bson.M służy do opisywania nieuporządkowanych par klucz-wartość, w przeciwieństwie do bson.D, który dba o kolejność przechowywania kluczy.

Definicja:

type M map[string]interface{}

Przykład:

bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}

Równoważny JSON:

{
    "foo": "bar",
    "hello": "world",
    "pi": 3.14159
}