Nullen beim Unmarshaling von MongoDB-Dokumenten ignorieren
Mongo-Go-Driver bietet mehrere Ansätze zum Ignorieren von Nullen beim Unmarshaling von MongoDB-Dokumenten in Go-Strukturen.
1. Benutzerdefinierte Decoder für bestimmte Typen
2. „Typneutrale“ Null-Aware-Decoder
Codebeispiel:
// 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)
Das obige ist der detaillierte Inhalt vonWie ignoriere ich Nullen beim Unmarshaling von MongoDB-Dokumenten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!