Maison > développement back-end > Golang > Comment remplir automatiquement les champs `created_at` et `updated_at` dans les structures Go avant l'insertion de MongoDB ?

Comment remplir automatiquement les champs `created_at` et `updated_at` dans les structures Go avant l'insertion de MongoDB ?

Mary-Kate Olsen
Libérer: 2024-11-24 19:08:11
original
191 Les gens l'ont consulté

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

Remplissage automatique de Created_at et Updated_at dans Go Struct avant l'insertion dans MongoDB

Lors de l'insertion d'une structure dans une collection MongoDB à l'aide du pilote MongoDB pour Go, les champs Created_at et Updated_at sont réglé à l'heure zéro (0001-01-01T00:00:00.000 00h00). Ce n'est peut-être pas le comportement souhaité, surtout si ces champs sont censés stocker l'heure réelle de création et de modification.

Maréchaleur personnalisé

Le serveur MongoDB ne prend pas en charge nativement le remplissage automatique de create_at et champs update_at. Cependant, vous pouvez implémenter cette fonctionnalité en créant un marshaler personnalisé.

Implémentation de bson.Marshaler

Implémentez l'interface bson.Marshaler pour votre type d'utilisateur. Cela vous permettra de personnaliser la façon dont la structure est marshalée dans BSON avant d'être insérée dans la base de données.

La méthode MarshalBSON de votre marshaleur personnalisé doit effectuer les étapes suivantes :

  1. If CreatedAt est zéro, réglez-le sur l'heure actuelle.
  2. Définissez UpdatedAt sur l'heure actuelle.
  3. Marshal la structure dans BSON à l'aide de la fonction de base bson.Marshal.

Voici un exemple de marshaleur personnalisé :

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

Utilisation

Pour utiliser le marshaleur personnalisé , n'oubliez pas de l'utiliser partout où vous insérez une structure User dans la base de données à l'aide de la méthode InsertOne. Vous devez passer un pointeur vers la structure User en tant qu'argument.

Exemple :

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

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

Notez que le marshaleur personnalisé ne fonctionnera pas si vous l'intégrez dans une structure plus grande. Pour éviter ce problème, vous pouvez plutôt utiliser un marshaleur personnalisé pour l'intégralité de la structure intégrée.

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