You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:57:04