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?

Wie fülle ich die Felder „created_at' und „updated_at' in Go-Strukturen vor dem Einfügen von MongoDB automatisch aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-24 19:08:11186Durchsuche

How to Automatically Populate `created_at` and `updated_at` Fields in Go Structs Before MongoDB Insertion?

Erstellte_at und aktualisierte_at in der Go-Struktur vor dem Einfügen in MongoDB automatisch ausfüllen

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.

Benutzerdefinierter Marshaler

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.

bson.Marshaler implementieren

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:

  1. Wenn CreatedAt Null ist, setzen Sie es auf die aktuelle Zeit.
  2. Setzen Sie UpdatedAt auf die aktuelle Zeit.
  3. Marshal Fügen Sie die Struktur mithilfe der Basisfunktion bson.Marshal in BSON ein.

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))
}

Verwendung

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!

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