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

Comment automatiser les horodatages Created_at et Updated_at dans MongoDB à l'aide du BSON Marshaler de Go ?

DDD
Libérer: 2024-12-05 09:22:10
original
266 Les gens l'ont consulté

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

Automatisation du remplissage des champs Created_at et Updated_at dans MongoDB

Dans l'extrait de code Go fourni, la structure utilisateur définit les champs pour _id, Created_at, Updated_at , et le nom. Lorsqu'un nouvel objet utilisateur est inséré dans la base de données à l'aide de InsertOne(), les champs Created_at et Updated_at ne sont pas automatiquement renseignés avec des horodatages.

Question : Comment pouvez-vous utiliser Create_at et Update_at automatisés dans le code Go fourni avec MongoDB en utilisant uniquement le pilote MongoDB ?

Solution :Le Le serveur MongoDB ne gère pas automatiquement le remplissage automatique des horodatages pour ces champs. Cependant, vous pouvez implémenter cette fonctionnalité manuellement en implémentant un Marshaler personnalisé pour votre structure User.

Pour créer un Marshaler personnalisé, implémentez l'interface bson.Marshaler. La méthode MarshalBSON() sera appelée lorsque les valeurs de type *User sont marshalées pour être insérées dans la base de données.

Voici un exemple de la façon dont cela peut être implémenté :

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

Notez que la méthode MarshalBSON() a un récepteur de pointeur, vous devez donc utiliser un pointeur vers la valeur User lors de l'insertion :

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

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

Le but de mon type est d'éviter le débordement de pile pendant le processus de marshaling.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal