선택적 필드가 포함된 양식을 처리할 때 해당 필드를 빈 문자열, 거짓 부울 값 또는 JSON의 0 값 정수. 그러나 Golang 구조에서 생략 플래그를 사용하면 매핑 중에 이러한 값이 명시적으로 무시되므로 MongoDB에서 문서를 업데이트할 때 문제가 발생할 수 있습니다.
쿠폰 구조를 고려하세요. 생략으로 표시된 필드가 있는 Golang:
type Coupon struct { Id int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status bool `json:"status" bson:"status"` }
초기 저장 중에 비어 있지 않은 모든 필드가 성공적으로 저장됩니다. 몽고DB. 그러나 후속 업데이트 시 선택적 필드가 빈 값(예: 선택되지 않은 확인란)으로 수정된 경우 생략 플래그는 빈 값이 구조에 매핑되는 것을 방지합니다. 결과적으로 업데이트 작업이 기존 필드 값을 수정하지 못합니다.
bool 및 int 유형에는 두 가지 가능한 값(false 및 true, 0 및 int)만 있기 때문에 문제가 발생합니다. 각각 0이 아님). bool 필드의 세 가지 상태(업데이트 아님, false로 설정 또는 true로 설정)와 int 필드의 유사한 사례를 나타내야 하는 요구 사항을 수용하려면 포인터를 사용하도록 구조 필드를 수정해야 합니다.
type Coupon struct { Id *int `json:"id,omitempty" bson:"_id,omitempty"` Name string `json:"name,omitempty" bson:"name,omitempty"` Status *bool `json:"status" bson:"status"` }
포인터의 경우 nil 값은 생략된 필드를 나타냅니다. nil이 아닌 포인터의 경우 지정된 값은 필드 값을 나타냅니다. 따라서 다음 시나리오를 처리할 수 있습니다.
포인터와 생략 플래그를 활용하면 MongoDB의 기존 값을 재정의하지 않고 업데이트가 올바르게 수행되도록 하면서 Golang 구조의 선택적 필드를 효과적으로 처리할 수 있습니다.
위 내용은 MongoDB 문서를 업데이트할 때 Go에서 `omitempty`를 사용하여 선택적 필드를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!