Maison > développement back-end > Golang > le corps du texte

Comment gérer les mises à jour de MongoDB avec l'indicateur « omitempty » de Golang ?

Mary-Kate Olsen
Libérer: 2024-11-24 11:56:16
original
530 Les gens l'ont consulté

How to Handle MongoDB Updates with Golang's `omitempty` Flag?

Mise à jour des champs MongoDB avec l'indicateur Omitempty dans les structures Golang

L'indicateur omitempty dans les structures Golang permet aux développeurs d'exclure les champs du marshalling JSON s'ils en ont valeurs nulles. Cependant, ce comportement peut poser des problèmes lors de la mise à jour des documents MongoDB.

Considérez un formulaire de coupon où certains champs sont facultatifs. Une structure Golang représentant le formulaire peut avoir des indicateurs d'omimpty sur ces champs comme :

type Coupon struct {
    Id               int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Code             string `json:"code,omitempty" bson:"code,omitempty"`
    Description      string `json:"description,omitempty" bson:"description,omitempty"`
    Status           bool   `json:"status" bson:"status"`
    MaxUsageLimit    int    `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
    SingleUsePerUser bool   `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}
Copier après la connexion

Problème

Le problème survient lors de la mise à jour du formulaire. Si une case précédemment cochée (champ booléen) est décochée lors de la soumission du formulaire, l'indicateur omitempty l'exclut de la structure. Par conséquent, la valeur n'est pas mise à jour dans le document MongoDB.

De même, si seuls les champs obligatoires sont fournis dans une requête API REST, MongoDB écrase l'intégralité du document, y compris les valeurs qui ne doivent pas être mises à jour.

Solution

Pour palier à ce problème, il faut changer les champs annotés avec omitempty en pointeurs. Cela permet aux champs d'avoir une valeur nulle, qui représente l'état "non mis à jour":

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Code             string `json:"code,omitempty" bson:"code,omitempty"`
    Description      string `json:"description,omitempty" bson:"description,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
    MaxUsageLimit    *int    `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
    SingleUsePerUser *bool   `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}
Copier après la connexion

Avec cette modification, un pointeur nul indique que le champ ne doit pas être mis à jour. Si un pointeur non nul est fourni, sa valeur sera définie dans le document MongoDB. Cela résout efficacement le problème de mise à jour des champs bool et int tout en conservant l'indicateur omitempty.

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