Maison > développement back-end > Golang > Comment automatiser les horodatages Created_at et Updated_at dans MongoDB à l'aide de Golang ?

Comment automatiser les horodatages Created_at et Updated_at dans MongoDB à l'aide de Golang ?

Linda Hamilton
Libérer: 2024-12-06 13:17:11
original
1021 Les gens l'ont consulté

How to Automate Created_at and Updated_at Timestamps in MongoDB using Golang?

Automatisation des champs Created_at et Updated_at dans MongoDB avec Golang

Dans l'extrait de code fourni, la structure utilisateur manque d'automatisation pour les champs create_at et update_at . Ces champs sont cruciaux pour le suivi des événements temporels.

Solution

Le serveur MongoDB ne prend pas en charge le remplissage automatisé des champs. Pour y parvenir, vous pouvez implémenter une fonction de marshaling personnalisée pour la structure User. En implémentant l'interface bson.Marshaler, vous pouvez contrôler la manière dont la structure est sérialisée dans BSON.

Implémentation

Voici comment implémenter la fonction MarshalBSON :

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))
}
Copier après la connexion

Vous devez noter que la fonction MarshalBSON dispose d'un récepteur pointeur, et vous devez utiliser un pointeur vers votre Valeur utilisateur lors du marshaling.

Utilisation

Après avoir implémenté la fonction de marshaling personnalisée, vous pouvez l'utiliser comme ceci :

client := mongo.NewClient(...) // (redacted for brevity)

c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), &user); err != nil {
    // handle error
}
Copier après la connexion

Explication

La fonction MarshalBSON vérifie si le champ créé_at est vide et le définit sur le l'heure actuelle si c'est le cas. Il définit ensuite le champ update_at sur l'heure actuelle. En utilisant un alias de type (my) et en convertissant la structure User en *my, vous évitez un potentiel débordement de pile pendant le processus de marshalling.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal