Maison >développement back-end >Golang >Comment ajouter automatiquement les horodatages Created_at et Updated_at aux documents MongoDB à l'aide de Go ?

Comment ajouter automatiquement les horodatages Created_at et Updated_at aux documents MongoDB à l'aide de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 08:29:08662parcourir

How to Automatically Add Created_at and Updated_at Timestamps to MongoDB Documents Using Go?

Ajout de champs Created_at et Updated_at automatisés dans Golang Struct pour MongoDB

L'insertion de données dans MongoDB avec une structure Go nécessite de gérer le remplissage automatique de create_at et les champs update_at, une fonctionnalité non intrinsèquement prise en charge par MongoDB serveur.

Pour résoudre ce problème, envisagez d'implémenter un marshaleur personnalisé en implémentant l'interface bson.Marshaler. La fonction MarshalBSON() sera invoquée lors de la persistance d'une valeur de type Utilisateur.

Voici un extrait de code démontrant l'implémentation :

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

Notez que la méthode MarshalBSON() utilise un pointeur récepteur, il est donc nécessaire d'utiliser un pointeur vers l'instance User.

Exemple utilisation :

user := &User{Name: "username"}

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

En employant cette technique, vous pouvez automatiquement mettre à jour les champs create_at et update_at lors de l'insertion ou de la mise à jour d'un document MongoDB via la structure Go.

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!

Déclaration:
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