如何避免Go-Mongo将嵌入的Base结构体存储为独立嵌套对象
解决方案
你只需要给嵌入的Base结构体加上bson:",inline"标签即可,该标签会通知MongoDB Go驱动将内嵌结构体的所有字段平铺到父级文档的顶层,不会生成独立的嵌套对象。
修改后的结构体代码如下:
type Base struct { CreatedAt time.Time `json:"createdAt" bson:"created_at"` UpdatedAt time.Time `json:"updatedAt" bson:"updated_at"` DeletedAt time.Time `json:"deletedAt,omitempty" bson:"deleted_at"` } type Nice struct { Base `bson:",inline"` // 新增inline标签 Notes string `json:"notes" bson:"notes"` }
修改后存储的文档格式会符合预期:
{ "_id" : ObjectId("6154807677b7f58b6438b71c"), "created_at" : ISODate("2021-09-29T15:04:22.322Z"), "updated_at" : ISODate("0001-01-01T00:00:00Z"), "deleted_at" : ISODate("0001-01-01T00:00:00Z"), "notes" : ""}
注意事项
- 如果同时嵌入多个结构体,要确保不同嵌入结构体之间的字段名、和父结构体自有字段名没有重复,否则驱动会抛出字段冲突错误。
- 该标签同样适用于非匿名的结构体嵌套字段的平铺需求,只需要给对应结构体字段加上
bson:",inline"即可。
内容的提问来源于stack exchange,提问作者Zayn
相关产品推荐
相关产品推荐

