Heim >Backend-Entwicklung >Golang >Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit dem BSON Marshaler von Go?
Automatisieren der Felderfüllung „Created_at“ und „Updated_at“ in MongoDB
Im bereitgestellten Go-Code-Snippet definiert die Benutzerstruktur Felder für „_id“, „created_at“ und „update_at“. , und Name. Wenn ein neues Benutzerobjekt mit InsertOne() in die Datenbank eingefügt wird, werden die Felder „created_at“ und „update_at“ nicht automatisch mit Zeitstempeln gefüllt.
Frage: Wie können Sie automatisierte „created_at“- und „update_at“-Felder verwenden? den bereitgestellten Go-Code mit MongoDB nur unter Verwendung des MongoDB-Treibers?
Lösung: Die Der MongoDB-Server übernimmt nicht automatisch das automatische Ausfüllen von Zeitstempeln für diese Felder. Sie können diese Funktionalität jedoch manuell implementieren, indem Sie einen benutzerdefinierten Marshaler für Ihre Benutzerstruktur implementieren.
Um einen benutzerdefinierten Marshaler zu erstellen, implementieren Sie die bson.Marshaler-Schnittstelle. Die MarshalBSON()-Methode wird aufgerufen, wenn Werte vom Typ *User zum Einfügen in die Datenbank gemarshallt werden.
Hier ist ein Beispiel, wie dies implementiert werden kann:
func (u *User) MarshalBSON() ([]byte, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } u.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(u)) }
Beachten Sie das Die MarshalBSON()-Methode verfügt über einen Zeigerempfänger, daher müssen Sie beim Einfügen einen Zeiger auf den Benutzerwert verwenden:
user := &User{Name: "username"} err := client.Database("db").Collection("collection").InsertOne(context.Background(), user) if err != nil { // handle error }
Der Zweck der Mein Typ ist es, einen Stapelüberlauf während des Marshalling-Prozesses zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit dem BSON Marshaler von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!