Standarddatum beim Einfügen eines Dokuments mit Time.Time-Feld festlegen
In mongoose ist das Festlegen eines Standardwerts für ein Datumsfeld einfach, aber In Go mit mgo sind die Dinge etwas anders.
Warum können Sie keine Standardwerte für Felder festlegen? Los?
Go lässt keine Standardwerte für Felder zu. Bei der Erstellung haben sie den Nullwert ihres Typs.
Lösung 1: Konstruktorähnliche Funktion
Ein Ansatz besteht darin, eine konstruktorähnliche Funktion zu erstellen Initialisiert das CreatedAt-Feld. Es werden jedoch keine Fälle behandelt, in denen der Zeitstempel mit dem Zeitstempel der Datenbank übereinstimmen muss.
Lösung 2: Benutzerdefinierte Marshalling-Logik
Eine bessere Lösung beinhaltet die Implementierung von benutzerdefiniertem BSON. Getter-Logik.
GetBSON() Funktion
Die Funktion GetBSON() in der Go-Implementierung stellt einen zu speichernden Wert bereit. In diesem Fall möchten wir das Feld „CreatedAt“ vor dem Speichern auf die aktuelle Zeit setzen.
func (u *User) GetBSON() (interface{}, error) { u.CreatedAt = time.Now() type my *User return my(u), nil }
Neuen Typ erstellen
Beachten Sie, dass ein neuer Typ, my , wird erstellt und zurückgegeben, um eine endlose Rekursion zu verhindern.
Umgang mit Vorhandenem Datensätze
Durch das Hinzufügen einer Prüfung wird sichergestellt, dass das Feld „CreatedAt“ nur dann festgelegt wird, wenn es den Nullwert hat, wodurch Überschreibungen vorhandener Datensätze verhindert werden:
func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Das obige ist der detaillierte Inhalt vonWie kann ich ein Standarddatum und eine Standardzeit für ein Feld in einem Go Mongoose-Dokument festlegen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!