> 백엔드 개발 > Golang > MongoDB의 복잡한 구조에 대한 사용자 정의 BSON 마샬링을 구현하는 방법은 무엇입니까?

MongoDB의 복잡한 구조에 대한 사용자 정의 BSON 마샬링을 구현하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-03 07:07:10
원래의
548명이 탐색했습니다.

How to Implement Custom BSON Marshalling for Complex Structures in MongoDB?

복잡한 구조를 위한 사용자 정의 BSON 마샬링

기본이 아닌 마샬링이 필요한 사용자 정의 데이터 구조를 처리할 때 MongoDB에서 JSON에서 BSON으로 전환 어려울 수 있습니다. 이 기사에서는 복잡한 구조에 대한 BSON 마샬링을 사용자 정의하여 질문에 설명된 JSON 마샬링 방법과 동등한 구현을 제공하는 방법을 안내합니다.

사용자 정의 BSON 인터페이스

사용자 정의 BSON 마샬링에는 Getter와 Setter라는 두 가지 인터페이스 구현이 포함됩니다. Getter 인터페이스는 BSON에서 객체를 표현하는 방법을 정의하고, Setter 인터페이스는 BSON에서 객체를 초기화하는 방법을 지정합니다.

사용자 정의 통화 구조

다음을 고려하세요. 원래 질문의 통화 구조:

type Currency struct {
    value        decimal.Decimal //The actual value of the currency.
    currencyCode string          //The ISO currency code.
}
로그인 후 복사

이 시나리오에서는 마샬링 프로세스를 사용자 정의하여 특정 BSON 표현.

Getter 및 Setter 구현

이를 달성하려면 다음과 같이 Getter 및 Setter 인터페이스를 구현하세요.

// GetBSON implements bson.Getter.
func (c Currency) GetBSON() (interface{}, error) {
    f := c.Value().Float64()
    return struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    }{
        Value:        f,
        CurrencyCode: c.currencyCode,
    }, nil
}

// SetBSON implements bson.Setter.
func (c *Currency) SetBSON(raw bson.Raw) error {

    decoded := new(struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    })

    bsonErr := raw.Unmarshal(decoded)

    if bsonErr == nil {
        c.value = decimal.NewFromFloat(decoded.Value)
        c.currencyCode = decoded.CurrencyCode
        return nil
    } else {
        return bsonErr
    }
}
로그인 후 복사

사용법:

Getter 및 Setter 구현이 완료되었으므로 이제 mgo 라이브러리의 Marshal 메서드를 사용하여 통화 구조체를 BSON으로 마샬링할 수 있습니다. 예를 들어 제품 구조에서는

type Product struct {
    Name  string
    Code  string
    Price currency.Currency
}
로그인 후 복사

통화 필드가 포함된 제품 구조를 마샬링할 때 사용자 정의 BSON 마샬링이 자동으로 적용됩니다.

위 내용은 MongoDB의 복잡한 구조에 대한 사용자 정의 BSON 마샬링을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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