Golang 구조에서 생략 플래그를 사용하여 MongoDB 필드 업데이트
Golang 구조에서 생략 플래그를 사용하면 개발자가 JSON 마샬링에서 필드를 제외할 수 있습니다. 0 값. 그러나 이 동작은 MongoDB 문서를 업데이트할 때 문제를 일으킬 수 있습니다.
일부 필드가 선택 사항인 쿠폰 양식을 고려해 보세요. 양식을 나타내는 Golang 구조에는 다음과 같은 필드에 생략 플래그가 있을 수 있습니다.
type Coupon struct { Id int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Code string `json:"code,omitempty" bson:"code,omitempty"` Description string `json:"description,omitempty" bson:"description,omitempty"` Status bool `json:"status" bson:"status"` MaxUsageLimit int `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"` SingleUsePerUser bool `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"` }
문제
양식을 업데이트할 때 문제가 발생합니다. 양식 제출 중에 이전에 선택한 확인란(부울 필드)을 선택 취소하면 생략 플래그가 해당 항목을 구조에서 제외합니다. 결과적으로 MongoDB 문서에서는 값이 업데이트되지 않습니다.
마찬가지로 REST API 요청에 필수 필드만 제공되면 MongoDB는 업데이트해서는 안 되는 값을 포함하여 전체 문서를 덮어씁니다.
해결책
이 문제를 극복하려면 주석이 달린 필드를 변경해야 합니다. 포인터 생략. 이를 통해 필드는 "업데이트되지 않음" 상태를 나타내는 nil 값을 가질 수 있습니다.
type Coupon struct { Id *int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Code string `json:"code,omitempty" bson:"code,omitempty"` Description string `json:"description,omitempty" bson:"description,omitempty"` Status *bool `json:"status" bson:"status"` MaxUsageLimit *int `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"` SingleUsePerUser *bool `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"` }
이 수정을 통해 nil 포인터는 필드가 업데이트되지 않아야 함을 나타냅니다. nil이 아닌 포인터가 제공되면 해당 값은 MongoDB 문서에 설정됩니다. 이는 생략 플래그를 유지하면서 bool 및 int 필드를 업데이트하는 문제를 효과적으로 해결합니다.
위 내용은 Golang의 'omitempty' 플래그를 사용하여 MongoDB 업데이트를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!