登录
首页 >  Golang >  Go问答

如何处理golang中的bson标签以兼容数据库中小写字段名的问题?

来源:stackoverflow

时间:2024-02-13 11:45:22 289浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《如何处理golang中的bson标签以兼容数据库中小写字段名的问题?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

结构体有很多(大约有几百个结构体,都是由工具自动生成的。)像这样:

type chatinfo struct {
    name         string `json:"name"`
    iconframe    uint64 `json:"iconframe"`
}

忘记bson标签,导致数据库中的字段名变成小写。 像这样:

{
    "name" : "myname",
    "iconframe" :101
}

现在,我想添加 bson 标签:

type ChatInfo struct {
    Name         string `json:"name" bson:"name"`
    IconFrame    uint64 `json:"iconFrame" bson:"iconFrame"`
}

但是当我从数据库读取数据时,发现iconframe字段的值为0。

我想找到一种方法来保持与原始小写字段名称的兼容性。由于数据较多,存储有些杂乱,所以修改数据库中的数据不太实用。

谢谢。


正确答案


您可以实现自定义 bson 解组逻辑,将 iconframeiconframe mongodb 字段解码为 chatinfo.iconframe 字段,但该自定义逻辑将在所有文档解码中运行!

您根本不想要那些不必要的开销。最简单的是重命名 mongodb 中的现有字段。您只需运行几次更新操作一次,然后就可以永远使用了。

例如,要将 iconframe 字段重命名为 iconframe,请使用以下命令:

db.chatinfo.updateMany(
  {"iconframe": {$exists: true}},
  {$rename: {"iconframe": "iconFrame"}}
)

(过滤器部分甚至可能为空,因为不存在的字段不会更新。)

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何处理golang中的bson标签以兼容数据库中小写字段名的问题?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>