Marshalling/Unmarshaling für MongoDB-Typen in Go anpassen
Beim Zugriff auf MongoDB über Go kann es vorkommen, dass Werte währenddessen transformiert werden müssen Marshalling/Unmarshaling. Stellen Sie sich den Fall vor, dass Sie auf das EndDate-Feld zugreifen, das als Zeichenfolge in MongoDB gespeichert ist, es jedoch als Go time.Time-Typ benötigen.
Um solche Szenarien zu bewältigen, können Sie mithilfe des BSON eine benutzerdefinierte Marshalling-/Unmarshaling-Logik implementieren. Getter- und bson.Setter-Schnittstellen. Hier ist eine Schritt-für-Schritt-Anleitung:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) { type my clientConfigData if err = raw.Unmarshal((*my)(c)); err != nil { return } c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr) return } func (c *clientConfigData) GetBSON() (interface{}, error) { c.EndDateStr = c.EndDate.Format(endDateLayout) type my *clientConfigData return my(c), nil }
Füllen Sie in SetBSON() die Struktur mit dem rohen MongoDB-Wert und analysieren Sie sie den EndDateStr in eine time.Time. Legen Sie in GetBSON() den EndDateStr fest und geben Sie ihn zurück.
Denken Sie beim Suchen oder Einfügen von Dokumenten an die Verwendung die benutzerdefinierte Marshalling-/Unmarshaling-Logik durch Angabe des clientConfigData-Typs.
var configRes = new(clientConfigData) err := clientDB. C(clientConfigCollection). Find(bson.M{}). One(&configRes) if err != nil { return nil, errors.Wrap(err, "finding config collection") }
Von Durch die Implementierung von benutzerdefiniertem Marshalling/Unmarshaling können Sie nahtlos mit MongoDB-Werten arbeiten, die bestimmte Typkonvertierungen erfordern. Denken Sie daran, sowohl SetBSON() als auch GetBSON() zu verarbeiten, um sowohl Marshalling als auch Unmarshalling abzudecken.
Das obige ist der detaillierte Inhalt vonWie kann ich das Marshaling/Unmarshaling für MongoDB-Typen in Go anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!