在 Go 中自定义 MongoDB 类型的编组/解组
从 Go 访问 MongoDB 时,可能会遇到需要转换值的情况编组/解组。考虑访问以字符串形式存储在 MongoDB 中的 EndDate 字段的情况,但您需要将其作为 Go time.Time 类型。
要解决此类场景,您可以使用 bson 实现自定义封送/解封逻辑。 Getter 和 bson.Setter 接口。这是分步指南:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) { type my clientConfigData if err = raw.Unmarshal((*my)(c)); err != nil { return } c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr) return } func (c *clientConfigData) GetBSON() (interface{}, error) { c.EndDateStr = c.EndDate.Format(endDateLayout) type my *clientConfigData return my(c), nil }
在 SetBSON() 中,使用原始 MongoDB 值填充结构并将 EndDateStr 解析为 time.Time。在 GetBSON() 中,设置 EndDateStr 并返回。
查找或插入文档时,请记住使用通过指定 clientConfigData 类型来自定义编组/解组逻辑。
var configRes = new(clientConfigData) err := clientDB. C(clientConfigCollection). Find(bson.M{}). One(&configRes) if err != nil { return nil, errors.Wrap(err, "finding config collection") }
通过实现自定义编组/解组,您可以无缝地使用需要特定类型转换的 MongoDB 值。请记住同时处理 SetBSON() 和 GetBSON() 以涵盖编组和解组。
以上是如何在 Go 中自定义 MongoDB 类型的编组/解组?的详细内容。更多信息请关注PHP中文网其他相关文章!