본문 바로가기

Work/개발 노트

[Go언어] embedded struct bson marshaling 시 struct 이름으로 키가 생성되는 문제

728x90

아래와 같이 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"`
}
728x90