首页 > 后端开发 > Golang > 正文

如何使用 Golang 的 omitempty 保留 MongoDB 更新中的空值?

DDD
发布: 2024-11-23 10:23:14
原创
622 人浏览过

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

如何在 Golang 结构中使用“omitempty”处理 MongoDB 更新中的空值

简介

带有“omitempty”字段的 Golang 结构允许将选择性 JSON 值映射到结构,排除具有空值的字段。但是,这可能会在更新 MongoDB 文档时带来挑战,因为空值可能不会反映在数据库中。

问题

使用带有“omitempty”的结构时用于映射 JSON 表单值的标志,空字段将被忽略。这在更新 MongoDB 中的文档时会带来问题:

  • 如果在更新过程中取消选中之前选中的复选框,则空值不会映射到结构中,并且无法保存到数据库。
  • 相反,在 REST API 更新中,仅提供必要的值可以覆盖数据库中的其他字段值,甚至是那些不应该提供的值已更改。

要求

维护“omitempty”标志,同时保留在 MongoDB 中保存空值或更新值的能力对于灵活和稳健的更新至关重要

解决方案

要解决此问题,请将结构体中受影响的字段转换为指针:

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"`
}
登录后复制

这样:

  • nil 指针表示省略的字段。
  • A指向零值的非零指针表示一个空字段。
  • 指向非零值的非零指针将字段设置为指定值。

通过使用指针,我们可以灵活地处理 MongoDB 更新中的空值和更新值,同时保留“omitempty”行为。

以上是如何使用 Golang 的 omitempty 保留 MongoDB 更新中的空值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板