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
Lepaskan: 2024-12-03 07:07:10
asal
610 orang telah melayarinya

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.
}
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan