MongoDB 문서를 업데이트할 때 Go에서 `omitempty`를 사용하여 선택적 필드를 처리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-24 21:46:36
원래의
904명이 탐색했습니다.

How to Handle Optional Fields with `omitempty` in Go When Updating MongoDB Documents?

생략 및 MongoDB 업데이트로 선택적 필드 처리

선택적 필드가 포함된 양식을 처리할 때 해당 필드를 빈 문자열, 거짓 부울 값 또는 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이 아닌 포인터의 경우 지정된 값은 필드 값을 나타냅니다. 따라서 다음 시나리오를 처리할 수 있습니다.

  • bool 필드를 제외하려면 *bool 값이 nil이어야 합니다.
  • false로 설정/업데이트하려면 거짓 값을 가리키는 포인터.
  • 참으로 설정/업데이트하려면 참에 대한 포인터여야 합니다. value.

포인터와 생략 플래그를 활용하면 MongoDB의 기존 값을 재정의하지 않고 업데이트가 올바르게 수행되도록 하면서 Golang 구조의 선택적 필드를 효과적으로 처리할 수 있습니다.

위 내용은 MongoDB 문서를 업데이트할 때 Go에서 `omitempty`를 사용하여 선택적 필드를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿