Heim >Backend-Entwicklung >Golang >Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit dem BSON Marshaler von Go?

Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit dem BSON Marshaler von Go?

DDD
DDDOriginal
2024-12-05 09:22:10240Durchsuche

How to Automate Created_at and Updated_at Timestamps in MongoDB using Go's BSON Marshaler?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn