In MongoDB ist es üblich, Standardzeitstempel für Dokumentfelder zu definieren. In Go with Mgo gibt es jedoch keine direkte Möglichkeit, Standardwerte für Felder festzulegen.
Ein Ansatz besteht darin, eine benutzerdefinierte Konstruktorfunktion zu erstellen, die den Standardwert ausfüllt:
func NewUser() *User { return &User{ CreatedAt: time.Now(), } }
Dadurch wird sichergestellt, dass jede neue Benutzerstruktur, die mit diesem Konstruktor erstellt wird, über ein standardmäßiges CreatedAt verfügt Feld.
Eine weitere Option besteht darin, eine benutzerdefinierte Serialisierungslogik mithilfe der bson.Getter-Schnittstelle von BSON zu implementieren:
func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Beim Marshalling des Benutzers an BSON ist dies der Fall Die Funktion „GetBSON“ wird aufgerufen und füllt das Feld „CreatedAt“ mit der aktuellen Uhrzeit, sofern dies noch nicht geschehen ist festgelegt.
Beachten Sie, dass bei beiden Ansätzen das Feld „CreatedAt“ mit der aktuellen Zeit überschrieben wird, selbst wenn ein vorhandenes Dokument aktualisiert wird. Um dies zu vermeiden, können Sie in GetBSON eine Prüfung hinzufügen, um das Feld nur dann festzulegen, wenn es den Nullwert hat.
Zusätzlich erfordert der benutzerdefinierte Marshalling-Ansatz, dass Sie bson.Getter für jeden Typ implementieren, der eine time.Time enthält Feld mit einem Standardwert.
Das obige ist der detaillierte Inhalt vonWie definiere ich Standarddaten in MongoDB-Dokumenten mit Go's Mgo?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!