Work/개발 노트
[Go언어] embedded struct bson marshaling 시 struct 이름으로 키가 생성되는 문제
★용호★
2020. 9. 18. 20:00
아래와 같이 Sample struct에서는 Inner struct를 embedded 하고 있다.
type Inner struct {
ID string `json:"id,omitempty" bson:"_id,omitempty"
Name string `json:"name" bson:"name"`
CreatedAt int64 `json:"created_at,omitempty" bson:"created_at,omitempty"`
ModifiedAt int64 `json:"modified_at,omitempty" bson:"modified_at,omitempty"`
}
type Sample struct {
Inner
}
이 때 marshaling을 수행하면 json의 경우에는 아래와 같이 원하는 대로 변환 된다.
{
"_id": "aa8a4400-08d9-4f6a-85dd-1c9fb8ca7f17",
"name": "sample",
"created_at": NumberLong("1593688321506"),
"modified_at": NumberLong("1593688321506")
}
하지만 bson으로 변환하여 mongodb로 변환할 경우 아래와 같이 embedded struct 이름으로 key가 생성된다.
{
"inner": {
"_id": "193fab9d-db73-49b7-b2cb-df6e712f9977",
"name": "sample",
"created_at": NumberLong("1593687284379"),
"modified_at": NumberLong("1593687284379")
}
}
이 경우 아래와 같이 inline tag를 지정하면 위 json과 같이 key 없이 원하는 결과를 얻을 수 있다.
type Sample struct {
Inner `bson:",inline"`
}