当前位置: > > > > 如何从 MongoDB 获取数据并将其作为 Golang 中的 JSON 发送到 API
来源:stackoverflow
2024-04-22 17:42:35
0浏览
收藏
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《如何从 MongoDB 获取数据并将其作为 Golang 中的 JSON 发送到 API》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
问题内容
我正在工作中编写一个 golang api,当调用该 api 时,它会从两个不同的 mongodb 集合获取数据并将其附加到结构中,将其转换为 json,然后进行字符串化并发送到 api (amazon sqs)
问题是,定义从 mongodb 接收的数据的结构,虽然有些字段定义正确,但有些字段不同
// IncentiveRule struct defines the structure of Incentive rule from Mongo type IncentiveRule struct { ... Other vars Rule Rule `bson:"rule" json:"rule"` ... Other vars } // Rule defines the struct for Rule Object inside an incentive rule type Rule struct { ... Rules interface{} `bson:"rules" json:"rules"` RuleFilter RuleFilter `bson:"rule_filter" bson:"rule_filter"` ... } // RuleFilter ... type RuleFilter struct { Condition string `bson:"condition" json:"condition"` Rules []interface{} `bson:"rules" json:"rules"` }
虽然这有效,但 rule
结构中定义的 interface{}
有所不同,并且在获取为 bson 并解码并重新编码为 json 时,而不是编码为 json 中的 "fookey":"barvalue"
,它是编码为 "key":"fookey","value":"barvalue"
,如何避免这种行为并将其设置为 "fookey":"barvalue"
解决方案
如果您使用 interface{}
,mongo-go 驱动程序可以自由选择它认为适合表示结果的任何实现。通常它会选择 来表示文档,该文档是键值对的有序列表,其中键值对是一个具有 Key
字段和 Value
字段的结构体,因此 Go 值可以保留字段顺序。
如果字段顺序不是必需的/重要的,您可以显式使用 bson.M
代替 interface{}
和 []bson.M
代替 []interface{}
。 是一个无序映射,但是它以fieldName:fieldValue
的形式表示字段,这正是你想要的。
今天关于《如何从 MongoDB 获取数据并将其作为 Golang 中的 JSON 发送到 API》的内容介绍就到此结束,如果有什么疑问或者建议,可以在公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!