Heim >Backend-Entwicklung >Golang >Wie fülle ich die Felder „created_at' und „updated_at' in Go-Strukturen vor dem Einfügen von MongoDB automatisch aus?
Beim Einfügen einer Struktur in eine MongoDB-Sammlung mit dem MongoDB-Treiber für Go werden die Felder erstellte_at und aktualisierte_at angezeigt auf die Nullzeit (0001-01-01T00:00:00.000) eingestellt 00:00). Dies ist möglicherweise nicht das gewünschte Verhalten, insbesondere wenn in diesen Feldern erwartet wird, dass sie den tatsächlichen Zeitpunkt der Erstellung und Änderung speichern.
Der MongoDB-Server unterstützt das automatische Ausfüllen von „created_at“ und nicht nativ aktualisierte_at-Felder. Sie können diese Funktionalität jedoch implementieren, indem Sie einen benutzerdefinierten Marshaller erstellen.
Implementieren Sie die bson.Marshaler-Schnittstelle für Ihren Benutzertyp. Dadurch können Sie anpassen, wie die Struktur in BSON gemarshallt wird, bevor sie in die Datenbank eingefügt wird.
Die MarshalBSON-Methode Ihres benutzerdefinierten Marshallers sollte die folgenden Schritte ausführen:
Hier ist ein Beispiel für einen benutzerdefinierten Marshaller:
func (user *User) MarshalBSON() ([]byte, error) { if user.CreatedAt.IsZero() { user.CreatedAt = time.Now() } user.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(user)) }
Um den benutzerdefinierten Marshaller zu verwenden Denken Sie daran, es überall dort zu verwenden, wo Sie mit der Methode „InsertOne“ eine Benutzerstruktur in die Datenbank einfügen. Sie müssen einen Zeiger auf die Benutzerstruktur als Argument übergeben.
Beispiel:
user := &User{Name: "username"} c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), user); err != nil { // handle error }
Beachten Sie, dass der benutzerdefinierte Marshaller nicht funktioniert, wenn Sie ihn in eine größere Struktur einbetten. Um dieses Problem zu vermeiden, können Sie stattdessen einen benutzerdefinierten Marshaller für die gesamte eingebettete Struktur verwenden.
Das obige ist der detaillierte Inhalt vonWie fülle ich die Felder „created_at' und „updated_at' in Go-Strukturen vor dem Einfügen von MongoDB automatisch aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!