JSON을 Go Bson으로 변환 — Numio
JSON 문서를 MongoDB Go 드라이버용으로 bson.M(객체)과 bson.A(배열)로 만든 Go 리터럴로 다시 씁니다. Go가 요구하는 후행 쉼표도 붙습니다. 키 순서는 유지되고 null은 nil이 되며 문자열은 그대로 복사됩니다.
mongosh나 Compass에서 테스트한 MongoDB 쿼리나 필터를 Go 코드로 옮깁니다.
JSON
Go Bson
이럴 때 사용하세요
- mongosh나 Compass에서 테스트한 MongoDB 쿼리나 필터를 Go 코드로 옮깁니다.
- 테스트에서 집계 스테이지나 업데이트 문서를 인라인 Go 리터럴로 작성합니다.
사용 방법
- 쿼리, 필터, 문서를 엄격한 JSON으로 붙여 넣습니다(키에 따옴표, ObjectId(...)나 ISODate(...) 같은 셸 헬퍼 없이).
- Go 패널에서 bson.M{...} 리터럴을 복사합니다. $gte, $in, $or 같은 연산자는 문자열 키로 유지됩니다.
- go.mongodb.org/mongo-driver/bson을 import하고 값을 Find, UpdateOne, Aggregate에 전달한 뒤, 아래 참고 사항에 따라 타입을 조정하세요.
JSON 입력
{
"status": "active",
"deletedAt": null,
"age": { "$gte": 18 },
"tags": { "$in": ["go", "mongo"] },
"$or": [
{ "verified": true },
{ "score": { "$gt": 90 } }
]
}Go bson.M / bson.A
bson.M{
"status": "active",
"deletedAt": nil,
"age": bson.M{
"$gte": 18,
},
"tags": bson.M{
"$in": bson.A{
"go",
"mongo",
},
},
"$or": bson.A{
bson.M{
"verified": true,
},
bson.M{
"score": bson.M{
"$gt": 90,
},
},
},
}세부 정보 및 제한 사항
JSON은 브라우저에서 파싱하고 순회해 리터럴을 만들며 서버로 아무것도 보내지 않습니다.
null은 nil이 됩니다. 숫자는 타입 없는 Go 상수이므로 18은 int, 1.5는 float64가 됩니다. 2^53을 넘는 정수는 JSON 파싱 시 정밀도를 잃습니다.
문자열은 Go 문자열 리터럴로 쓰이므로 "tags[0]"처럼 안에 있는 대괄호나 중괄호는 그대로 남습니다.
출력은 순서가 없는 bson.M입니다. 정렬 문서나 일부 파이프라인 스테이지처럼 필드 순서가 중요하면 bson.D를 사용하세요.
FAQ
ObjectId()나 ISODate()가 들어간 mongosh 쿼리를 붙여 넣을 수 있나요?
아니요. 입력은 유효한 JSON이어야 하므로 셸 헬퍼는 파싱 오류를 일으킵니다. 일반 문자열로 입력한 뒤 Go에서 hex로 만든 ObjectID(드라이버 v1에서는 primitive.ObjectIDFromHex)나 time.Time 값으로 바꾸세요.
Go struct를 생성하나요?
아니요. map과 slice 리터럴만 만듭니다. json 태그가 있는 타입 struct가 필요하면 JSON to Go 페이지를 사용하세요.
루트가 꼭 객체여야 하나요?
아니요. 루트 배열은 bson.A{...}가 되며, 각 스테이지가 bson.M인 집계 파이프라인에 잘 맞습니다.