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 ?
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.
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é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 :
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)) }
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 }
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!