이 장에서는 Golang이 MongoDB의 JSON 데이터 구조를 어떻게 표현하는지에 대해 소개합니다. 우리 모두가 알다시피, MongoDB 데이터 및 쿼리 조건은 JSON 구조를 사용하여 설명됩니다. 그래서, Go 언어에서 이러한 JSON 구조를 어떻게 표현할 수 있을까요?

bson 패키지

MongoDB에서 제공하는 공식 Go 언어 드라이버는 JSON 데이터를 설명하기 위한 여러 데이터 구조를 포함한 bson 패키지를 제공합니다.

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
}