>백엔드 개발 >Golang >Golang의 'omitempty' 플래그를 사용하여 MongoDB 업데이트를 처리하는 방법은 무엇입니까?

Golang의 'omitempty' 플래그를 사용하여 MongoDB 업데이트를 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-24 11:56:16597검색

How to Handle MongoDB Updates with Golang's `omitempty` Flag?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.