Heim >Backend-Entwicklung >Golang >Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit Golang?

Wie automatisiere ich Created_at- und Updated_at-Zeitstempel in MongoDB mit Golang?

Linda Hamilton
Linda HamiltonOriginal
2024-12-06 13:17:111015Durchsuche

How to Automate Created_at and Updated_at Timestamps in MongoDB using 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!

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