如何从 MongoDB 中获取数据并将其作为 Golang 中的 JSON 发送到 API

我正在编写一个 Golang 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"`

}


虽然这可行,但interface{}内部定义的Rule结构是不同的,并且在获得 BSON 并解码和重新编码为 JSON 时,而不是像JSON 中那样编码"fookey":"barvalue",它被编码为"Key":"fookey","Value":"barvalue",如何避免这种行为并将其作为"fookey":"barvalue"


蛊毒传说
浏览 225回答 1
1回答

江户川乱折腾

如果您使用interface{},则 mongo-go 驱动程序可以自由选择它认为适合表示结果的任何实现。通常它会选择bson.D表示文档,它是键值对的有序列表,其中一对是一个结构体,具有一个字段 forKey和一个字段 for Value,因此 Go 值可以保留字段顺序。如果字段顺序不是必需/重要的,您可以显式使用bson.M代替interface{}和[]bson.M代替[]interface{}。bson.M是一个无序映射,但它以 的形式表示字段fieldName: fieldValue,这正是您想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go