Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Struktur Kompleks dalam MongoDB?

Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Struktur Kompleks dalam MongoDB?

Susan Sarandon
Susan Sarandonasal
2024-12-03 07:07:10612semak imbas

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

Marshalling BSON Tersuai untuk Struktur Kompleks

Apabila berurusan dengan struktur data tersuai yang memerlukan marshalling bukan lalai, beralih daripada JSON kepada BSON dalam MongoDB boleh mencabar. Artikel ini akan membimbing anda melalui penyesuaian BSON marshalling untuk struktur kompleks, menyediakan pelaksanaan yang setara dengan kaedah marshalling JSON yang diterangkan dalam soalan.

Antaramuka BSON Tersuai

BSON Tersuai marshalling melibatkan pelaksanaan dua antara muka: Getter dan Setter. Antara muka Getter mentakrifkan cara objek harus diwakili dalam BSON, manakala antara muka Setter menentukan cara objek harus dimulakan daripada BSON.

Struktur Mata Wang Tersuai

Pertimbangkan Struktur mata wang daripada soalan asal:

type Currency struct {
    value        decimal.Decimal //The actual value of the currency.
    currencyCode string          //The ISO currency code.
}

Dalam senario ini, anda ingin menyesuaikan proses marshalling untuk mengeluarkan perwakilan BSON tertentu.

Melaksanakan Getter dan Setter

Untuk mencapai ini, laksanakan antara muka Getter dan Setter sebagai berikut:

// 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
    }
}

Penggunaan:

Dengan pelaksanaan Getter dan Setter disediakan, anda kini boleh menyusun struct Mata Wang kepada BSON menggunakan kaedah Marshal perpustakaan mgo. Contohnya, dalam struktur Produk:

type Product struct {
    Name  string
    Code  string
    Price currency.Currency
}

Marshalling BSON tersuai akan digunakan secara automatik apabila menyusun struct Produk yang mengandungi medan Mata Wang.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pemasaran BSON Tersuai untuk Struktur Kompleks dalam MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn