> 백엔드 개발 > Golang > 이동 중에 MongoDB 데이터에 액세스하기 위해 사용자 정의 마샬링 및 역마샬링을 구현하는 방법은 무엇입니까?

이동 중에 MongoDB 데이터에 액세스하기 위해 사용자 정의 마샬링 및 역마샬링을 구현하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-27 16:31:10
원래의
1019명이 탐색했습니다.

How to Implement Custom Marshalling and Unmarshalling to Access MongoDB Data as Go Time in Go?

Go에서 MongoDB 액세스: 사용자 정의 데이터 유형 작업

Go를 사용하여 MongoDB와 상호작용할 때 마샬링 중에 데이터 값을 수정하거나 변환해야 하는 상황이 발생할 수 있습니다. 그리고 언마샬링. 이는 데이터가 MongoDB에 특정 형식으로 저장되어 있지만 Go 구조체에서는 다른 형식이 필요할 때 발생할 수 있습니다.

EndDate가 MongoDB에 문자열로 저장되어 있지만 다음과 같이 액세스하려는 예를 생각해 보겠습니다. clientConfigData 구조체의 Go Time.

type clientConfigData struct {
    SMTPAssoc      int       `bson:"smtp_assoc"`
    PlanType       string    `bson:"plan_type"`
    EndDate        string    `bson:"end_date"`
}
로그인 후 복사

사용자 정의 마샬링 및 역마샬링을 구현하려면 bson.Getter를 정의하고 bson.Setter 인터페이스.

import (
    "context"
    "time"

    "github.com/mongodb/mongo-go-driver/bson"
)

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"` // Excluded from MongoDB
}

const endDateLayout = "2006-01-02 15:04:05"

// bson.Setter implementation
func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

// bson.Getter implementation
func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

// Custom code to query MongoDB
func FindConfig(ctx context.Context, client *mongo.Client) (*clientConfigData, error) {
    var configRes *clientConfigData
    err := client.Database("test").Collection("clientconfig").FindOne(ctx, bson.M{}).Decode(&configRes)
    if err != nil {
        return nil, errors.Wrap(err, "finding config collection")
    }
    return configRes, nil
}
로그인 후 복사

SetBSON 메서드에서는 먼저 원시 값을 역마샬링한 다음 EndDateStr 필드를 구문 분석하여 EndDate 필드를 채웁니다. GetBSON 메서드에서는 EndDate 필드를 반환하기 전에 문자열 형식으로 지정합니다.

이 사용자 정의 로직을 사용하면 이제 MongoDB에서 Go Time으로 EndDate에 액세스할 수 있습니다.

위 내용은 이동 중에 MongoDB 데이터에 액세스하기 위해 사용자 정의 마샬링 및 역마샬링을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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