Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengabaikan Nulls Apabila Membongkar Dokumen MongoDB dalam Go?

Bagaimana untuk Mengabaikan Nulls Apabila Membongkar Dokumen MongoDB dalam Go?

DDD
Lepaskan: 2024-12-27 11:12:08
asal
404 orang telah melayarinya

How to Ignore Nulls When Unmarshaling MongoDB Documents in Go?

Mengabaikan Nulls Semasa Menyahmarshaling Dokumen MongoDB

Mongo-Go-Driver menyediakan beberapa pendekatan untuk mengabaikan null apabila menyahmarshaling dokumen MongoDB ke dalam struct Go.

1. Penyahkod Tersuai untuk Jenis Tertentu

  • Buat dekoder tersuai untuk setiap jenis yang boleh mengendalikan nilai nol.
  • Tetapkan nilai kosong (cth., "" untuk rentetan, 0 untuk integer ) apabila menemui null.
  • Daftarkan penyahkod dalam pendaftaran dan tetapkannya pada mongo.Pelanggan atau objek lain yang berkaitan.

2. Penyahkod Null-Aware "Jenis-Neutral"

  • Buat penyahkod generik yang mengendalikan nilai nol untuk semua jenis sasaran.
  • Tetapkan nilai yang dinyahkodkan kepada nilai sifar jenis, dengan berkesan mengabaikan nilai nol.
  • Daftarkan penyahkod untuk jenis tertentu atau semua jenis menggunakan RegistryBuilder.

Contoh Kod:

// Nullaware decoder for all types, setting null values to zero values
type NullawareDecoder struct {
    DefDecoder bsoncodec.ValueDecoder
    ZeroValue  reflect.Value
}

// Decodes null values to zero values, otherwise delegates to the default decoder
func (nd *NullawareDecoder) DecodeValue(dctx bsoncodec.DecodeContext, vr bsonrw.ValueReader, val reflect.Value) error {
    if vr.Type() == bsontype.Null {
        if !val.CanSet() {
            return errors.New("value not settable")
        }
        if err := vr.ReadNull(); err != nil {
            return err
        }
        val.Set(nd.ZeroValue)
        return nil
    }
    return nd.DefDecoder.DecodeValue(dctx, vr, val)
}

// Register NullawareDecoder for desired types
rb := bson.NewRegistryBuilder()
rb.RegisterDecoder(reflect.TypeOf(""), &NullawareDecoder{bson.DefaultRegistry.LookupDecoder(reflect.TypeOf("")), reflect.ValueOf("")})
// ... (register for other types as needed)

// Use the registry within a ClientOptions instance
clientOpts := options.Client().
    ApplyURI("mongodb://localhost:27017/").
    SetRegistry(rb.Build())

// Initialize MongoDB client with customized registry to ignore nulls
client, err := mongo.Connect(ctx, clientOpts)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengabaikan Nulls Apabila Membongkar Dokumen MongoDB dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan