Este capítulo apresenta como o Golang expressa a estrutura de dados JSON do MongoDB. Como todos sabemos, os dados do MongoDB e as condições de consulta são descritos usando estruturas JSON. Então, como podemos expressar tais estruturas JSON na linguagem Go?

Pacote bson

O driver oficial da linguagem Go fornecido pelo MongoDB oferece um pacote bson, que inclui várias estruturas de dados para descrever dados JSON.

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

O tipo bson.D é usado para descrever arrays de pares chave-valor ordenados, que são comumente usados para expressar expressões de consulta do MongoDB e dados JSON.

Definição:

// Array de pares chave-valor
type D [] E

// Estrutura de chave-valor
type E struct {
	Chave  string
	Valor interface{}
}

Exemplo de uma expressão de consulta:

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

Expressão equivalente:

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

Exemplo de dados do 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"
}

O tipo bson.A é usado para definir arrays JSON.

Definição de arrays JSON:

type A []interface{}

Exemplo 1:

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

JSON equivalente:

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

Exemplo 2:

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

JSON equivalente:

["A", "D"]

O tipo bson.M é usado para descrever pares chave-valor não ordenados, ao contrário do bson.D, que se importa com a ordem de armazenamento das chaves.

Definição:

type M map[string]interface{}

Exemplo:

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

JSON equivalente:

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