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