Heim >Backend-Entwicklung >Golang >Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit Golang?
Automatisieren der Felder „Create_at“ und „Updated_at“ in MongoDB mit Golang
Im bereitgestellten Codeausschnitt fehlt der Benutzerstruktur die Automatisierung für die Felder „created_at“ und „update_at“. . Diese Felder sind für die Verfolgung zeitlicher Ereignisse von entscheidender Bedeutung.
Lösung
Dem MongoDB-Server fehlt die Unterstützung für die automatisierte Feldauffüllung. Um dies zu erreichen, können Sie eine benutzerdefinierte Marshalling-Funktion für die User-Struktur implementieren. Durch die Implementierung der bson.Marshaler-Schnittstelle können Sie steuern, wie die Struktur in BSON serialisiert wird.
Implementierung
So können Sie die MarshalBSON-Funktion implementieren:
import ( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) type User struct { ID primitive.ObjectID `bson:"_id,omitempty"` CreatedAt time.Time `bson:"created_at"` UpdatedAt time.Time `bson:"updated_at"` Name string `bson:"name"` } 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)) }
Sie müssen beachten, dass die MarshalBSON-Funktion einen Zeigerempfänger hat und Sie einen Zeiger auf Ihren verwenden müssen Benutzerwert beim Marshalling.
Verwendung
Nachdem Sie die benutzerdefinierte Marshalling-Funktion implementiert haben, können Sie sie wie folgt verwenden:
client := mongo.NewClient(...) // (redacted for brevity) c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), &user); err != nil { // handle error }
Erläuterung
Die MarshalBSON-Funktion prüft, ob das Feld „created_at“ leer ist und setzt es auf die aktuelle Uhrzeit, wenn ja. Anschließend wird das Feld „update_at“ auf die aktuelle Zeit gesetzt. Durch die Verwendung eines Typalias (my) und die Umwandlung der User-Struktur in *my vermeiden Sie einen möglichen Stapelüberlauf während des Marshalling-Prozesses.
Das obige ist der detaillierte Inhalt vonWie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!