Maison  >  Article  >  développement back-end  >  Comment conserver les valeurs vides dans les mises à jour de MongoDB à l'aide de « omitempty » de Golang ?

Comment conserver les valeurs vides dans les mises à jour de MongoDB à l'aide de « omitempty » de Golang ?

DDD
DDDoriginal
2024-11-23 10:23:14643parcourir

How to Preserve Empty Values in MongoDB Updates Using Golang's `omitempty`?

Comment gérer les valeurs vides dans les mises à jour de MongoDB avec « omitempty » dans les structures Golang

Introduction

Les structures Golang avec des champs « omitempty » permettent de mapper des valeurs JSON sélectives dans la structure, en excluant les champs avec des valeurs vides. Cependant, cela peut entraîner des difficultés lors de la mise à jour des documents MongoDB, car les valeurs vides peuvent ne pas être reflétées dans la base de données.

Problème

Lors de l'utilisation d'une structure avec "omitempty" indicateur pour mapper les valeurs du formulaire JSON, les champs vides sont ignorés. Cela pose des problèmes lors de la mise à jour des documents dans MongoDB :

  • Si une case précédemment cochée est décochée lors de la mise à jour, la valeur vide n'est pas mappée dans la structure et ne peut pas être enregistrée dans la base de données.
  • À l'inverse, dans les mises à jour de l'API REST, fournir uniquement les valeurs nécessaires peut remplacer les autres valeurs de champs de la base de données, même celles qui ne devraient pas l'être. modifié.

Exigence

Maintenir l'indicateur "omitempty" tout en préservant la possibilité de sauvegarder des valeurs vides ou mises à jour dans MongoDB est essentiel pour une mise à jour flexible et robuste processus.

Solution

Pour résoudre ce problème, convertissez les champs concernés dans la structure vers des pointeurs :

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"`
}

De cette façon :

  • Un pointeur nul représente un champ omis.
  • Un pointeur non nul vers une valeur nulle représente un champ vide.
  • Un pointeur non nul vers une valeur non nulle définit le champ sur la valeur spécifiée value.

En utilisant des pointeurs, nous permettons la flexibilité de gérer à la fois les valeurs vides et mises à jour dans les mises à jour de MongoDB tout en conservant le comportement "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!

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