


Comment résoudre le problème de valeur de données nulles lors de l'enregistrement sur MongoDB dans Golang ?
Dans Golang, lors de l'enregistrement de données sur MongoDB, vous rencontrez souvent le problème des valeurs de données nulles. Lorsque la valeur d'un champ est vide, MongoDB la stocke comme null par défaut. Cependant, dans les applications réelles, nous préférerons peut-être la stocker comme valeur par défaut spécifique pour un meilleur traitement et une meilleure interrogation des données. Alors, comment résoudre ce problème à Golang ? Cet article recevra une réponse détaillée de l'éditeur php Baicao.
Contenu de la question
Je suis nouveau sur Golang et j'ai un problème pour enregistrer les données dans la base de données. Après avoir reçu l'objet JSON de l'API, j'ai essayé de le stocker dans MongoDB mais les données ont été enregistrées avec des valeurs nulles.
Voici mon code et ma structure :
var current:={ "usd": { "code": "USD", "alphaCode": "USD", "numericCode": "840", "name": "U.S. Dollar", "rate": 0.68135437808647, "date": "Sun, 31 Dec 2023 11:55:01 GMT", "inverseRate": 1.4676650391657 }, "eur": { "code": "EUR", "alphaCode": "EUR", "numericCode": "978", "name": "Euro", "rate": 0.61624276207684, "date": "Sun, 31 Dec 2023 11:55:01 GMT", "inverseRate": 1.6227371119619 }, "gbp": { "code": "GBP", "alphaCode": "GBP", "numericCode": "826", "name": "U.K. Pound Sterling", "rate": 0.53541690218052, "date": "Sun, 31 Dec 2023 11:55:01 GMT", "inverseRate": 1.8677034586085 } }
C'est mon modèle.go
type Currency struct { Code string `json:"code"` AlphaCode string `json:"alphaCode"` NumericCode string `json:"numericCode"` Name string `json:"name"` Rate float64 `json:"rate"` Date string `json:"date"` InverseRate float64 `json:"inverseRate"` } type Rate struct { ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"` Currency `json:"currency"` Timestamp primitive.DateTime `json:"timestamp"` }
J'ai essayé de sauvegarder les données dans la base de données mais j'écris uniquement la valeur par défaut avec une chaîne vide et 0
const apiUrl = "https://www.floatrates.com/daily/aud.json" func GetRatesFromAPI() (map[string]models.Rate, error) { response, err := http.Get(apiUrl) fmt.Print(response) if err != nil { return nil, err } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return nil, err } var data map[string]models.Rate if err := json.Unmarshal(body, &data); err != nil { return nil, err } fmt.Print(data) return data, nil } r.GET("/get", func(c *gin.Context) { mongo.ConnectDB() rates, err := src.GetRatesFromAPI() fmt.Print(rates) if err != nil { log.Fatal(err) } for _, rate := range rates { mongo.InsertRate(rate) } c.String(http.StatusOK, "get rates") }) func InsertRate(rate models.Rate) { rate.Timestamp = primitive.NewDateTimeFromTime(time.Now()) collection := client.Database("mongodb").Collection("rates") ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() result, err := collection.InsertOne(ctx, rate) if err != nil { log.Fatal(err) } log.Println("Inserted rate with ID:", result.InsertedID) }
Je récupère cet objet dans la base de données mais sans aucune valeur et j'essaie de savoir pourquoi les données ne sont pas stockées correctement dans MongoDB. Toute aide ou conseil serait grandement apprécié !
[ { "_id": {"$oid": "659177abefa699e213158c16"}, "currency": { "code": "", "alphacode": "", "numericcode": "", "name": "", "rate": 0, "date": "", "inverserate": 0 }, "timestamp": {"$date": "2023-12-31T14:16:11.800Z"} } ]
Solution de contournement
Le problème est dû à l'utilisation de la balise json json:"currency"
在 Rate
类型中嵌入 Currency
类型而引起的。但是,为 json.Unmarshal
提供的输入 JSON 不包含相应的“Currency
”字段。因此,Currency
类型中的所有字段都会接收零值,然后将其存储在 MongoDB 中。为了解决这个问题,您可以在嵌入 Currency
类型期间消除 json 标签 json:"currency"
(illustré ci-dessous) ou à la construction de l'objet cible pour qu'il soit cohérent avec la structure du JSON d'entrée.
type Rate struct { ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"` Currency Timestamp primitive.DateTime `json:"timestamp"` }
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Cet article explique les mécanismes d'importation des packages de Go: les importations nommées (par exemple, importation & quot; fmt & quot;) et les importations vierges (par exemple, importation _ & quot; fmt & quot;). Les importations nommées rendent le contenu du package accessible, tandis que les importations vierges ne font que l'exécuter t

Cet article explique la fonction Newflash () de Beego pour le transfert de données inter-pages dans les applications Web. Il se concentre sur l'utilisation de NewFlash () pour afficher les messages temporaires (succès, erreur, avertissement) entre les contrôleurs, en tirant parti du mécanisme de session. Limiter

Cet article détaille la conversion efficace de la requête MySQL Resulte en tranches de structure GO. Il met l'accent sur l'utilisation de la méthode de numérisation de la base de données / SQL pour des performances optimales, en évitant l'analyse manuelle. Meilleures pratiques pour la cartographie des champs struct à l'aide de balises DB et de robus

Cet article montre la création de simulations et de talons dans GO pour les tests unitaires. Il met l'accent sur l'utilisation des interfaces, fournit des exemples d'implémentations simulées et discute des meilleures pratiques telles que la tenue de simulations concentrées et l'utilisation de bibliothèques d'assertion. L'articl

Cet article explore les contraintes de type personnalisé de Go pour les génériques. Il détaille comment les interfaces définissent les exigences de type minimum pour les fonctions génériques, améliorant la sécurité du type et la réutilisabilité du code. L'article discute également des limitations et des meilleures pratiques

Cet article détaille la rédaction de fichiers efficace dans GO, en comparant OS.WriteFile (adapté aux petits fichiers) avec OS.OpenFile et Buffered Writes (optimal pour les fichiers volumineux). Il met l'accent sur la gestion robuste des erreurs, l'utilisation de différer et la vérification des erreurs spécifiques.

L'article traite des tests d'unité d'écriture dans GO, couvrant les meilleures pratiques, des techniques de moquerie et des outils pour une gestion efficace des tests.

Cet article explore l'utilisation d'outils de traçage pour analyser le flux d'exécution des applications GO. Il traite des techniques d'instrumentation manuelles et automatiques, de comparaison d'outils comme Jaeger, Zipkin et OpenTelelemetry, et mettant en évidence une visualisation efficace des données
