Questo capitolo introduce come Golang esprime la struttura dati JSON di MongoDB. Come ben sappiamo, i dati di MongoDB e le condizioni di query sono descritti utilizzando strutture JSON. Quindi, come possiamo esprimere tali strutture JSON nel linguaggio Go?

Pacchetto bson

Il driver ufficiale del linguaggio Go fornito da MongoDB offre un pacchetto bson, che include diverse strutture dati per descrivere i dati JSON.

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

Il tipo bson.D è utilizzato per descrivere array chiave-valore ordinati, che sono comunemente utilizzati per esprimere le espressioni di query di MongoDB e i dati JSON.

Definizione:

// Array chiave-valore
type D [] E

// Struttura chiave-valore
type E struct {
    Key   string
    Value interface{}
}

Esempio di espressione di query:

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

Espressione equivalente:

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

Esempio di dati del documento:

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

JSON equivalente:

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

Il tipo bson.A è utilizzato per definire array JSON.

Definizione di array JSON:

type A []interface{}

Esempio 1:

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

JSON equivalente:

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

Esempio 2:

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

JSON equivalente:

["A", "D"]

Il tipo bson.M è utilizzato per descrivere coppie chiave-valore non ordinate, a differenza di bson.D, che si preoccupa dell'ordine di archiviazione delle chiavi.

Definizione:

type M map[string]interface{}

Esempio:

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

JSON equivalente:

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