Maison >développement back-end >Golang >Comment gérer les champs facultatifs avec « omitempty » dans Go lors de la mise à jour des documents MongoDB ?

Comment gérer les champs facultatifs avec « omitempty » dans Go lors de la mise à jour des documents MongoDB ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 21:46:36963parcourir

How to Handle Optional Fields with `omitempty` in Go When Updating MongoDB Documents?

Gestion des champs facultatifs avec Omitempty et les mises à jour de MongoDB

Lorsque vous traitez des formulaires contenant des champs facultatifs, il est courant de représenter ces champs sous forme de chaînes vides, de fausses valeurs booléennes ou entiers de valeur zéro en JSON. Cependant, lors de l'utilisation de l'indicateur omitempty dans les structures Golang, ces valeurs sont explicitement ignorées lors du mappage, ce qui peut entraîner des problèmes lors de la mise à jour des documents dans MongoDB.

Le problème :

Considérez une structure Coupon dans Golang avec des champs marqués comme omitempty :

type Coupon struct {
    Id               int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           bool   `json:"status" bson:"status"`
}

Lors de la sauvegarde initiale, tous les champs non vides sont stockés avec succès dans MongoDB. Cependant, lors des mises à jour ultérieures, si un champ facultatif a été modifié en une valeur vide (par exemple, une case à cocher non cochée), l'indicateur omitempty empêche la valeur vide d'être mappée dans la structure. En conséquence, l'opération de mise à jour ne parvient pas à modifier la valeur du champ existant.

La solution :

Le problème se pose car les types bool et int n'ont que deux valeurs possibles (false et true, 0 et non nul, respectivement). Pour répondre à la nécessité de représenter trois états (pas de mise à jour, défini sur false ou défini sur true) pour les champs bool et les cas similaires pour les champs int, les champs de structure doivent être modifiés pour utiliser des pointeurs.

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
}

Avec les pointeurs, une valeur nulle représente un champ omis. Pour les pointeurs non nuls, la valeur pointée représente la valeur du champ. Ainsi, les scénarios suivants peuvent être gérés :

  • Pour exclure un champ bool, la valeur *bool doit être nulle.
  • Pour le définir/mettre à jour sur false, il doit s'agir d'un pointeur vers une valeur fausse.
  • Pour le définir/mettre à jour sur vrai, il doit s'agir d'un pointeur vers une valeur vraie value.

En utilisant des pointeurs et l'indicateur omitempty, vous pouvez gérer efficacement les champs facultatifs dans les structures Golang tout en garantissant que les mises à jour sont effectuées correctement sans remplacer les valeurs existantes dans MongoDB.

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