ホームページ > バックエンド開発 > Golang > MongoDB で複雑な構造のカスタム BSON マーシャリングを実装するにはどうすればよいですか?

MongoDB で複雑な構造のカスタム BSON マーシャリングを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-03 07:07:10
オリジナル
601 人が閲覧しました

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

複雑な構造のカスタム BSON マーシャリング

デフォルト以外のマーシャリングを必要とするカスタム データ構造を扱う場合、MongoDB で JSON から BSON に移行する挑戦的になる可能性があります。この記事では、複雑な構造の BSON マーシャリングをカスタマイズする方法を説明し、質問で説明されている JSON マーシャリング メソッドと同等の実装を提供します。

カスタム BSON インターフェイス

カスタム BSONマーシャリングには、Getter と Setter という 2 つのインターフェイスの実装が含まれます。 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 メソッドを使用して Currency 構造体を BSON にマーシャリングできるようになります。たとえば、Product 構造の場合:

type Product struct {
    Name  string
    Code  string
    Price currency.Currency
}
ログイン後にコピー

Currency フィールドを含む Product 構造をマーシャリングするときに、カスタム BSON マーシャリングが自動的に適用されます。

以上がMongoDB で複雑な構造のカスタム BSON マーシャリングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート