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!