为了账号安全,请及时绑定邮箱和手机立即绑定

推入 mongodb 时自动填充 golang 结构中的 created_at

推入 mongodb 时自动填充 golang 结构中的 created_at

Go
有只小跳蛙 2022-12-05 11:12:12
type User struct {    ID           primitive.ObjectID `bson:"_id,omitempty"`    CreatedAt    time.Time          `bson:"created_at"`    UpdatedAt    time.Time          `bson:"updated_at"`    Name         string             `bson:"name"`}user := User{Name: "username"}client.Database("db").Collection("collection").InsertOne(context.Background(), user)如何在 golang 中使用上面代码中的自动 created_at 和 updated_at 以及 mongodb(仅限 mongodb 驱动程序)?目前它将为 created_at 和 updated_at 设置零时间 (0001-01-01T00:00:00.000+00:00)。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

MongoDB 服务器不支持这个。

您可以实施自定义封送拆收器,您可以在其中根据自己的喜好更新这些字段。实现bson.MarshalerMarshalBSON()当您保存您的*User类型的值时,您的函数将被调用。

这就是它的样子:

func (u *User) MarshalBSON() ([]byte, error) {

    if u.CreatedAt.IsZero() {

        u.CreatedAt = time.Now()

    }

    u.UpdatedAt = time.Now()

    

    type my User

    return bson.Marshal((*my)(u))

}

请注意该方法具有指针接收器,因此请使用指向您的值的指针:


user := &User{Name: "username"}



c := client.Database("db").Collection("collection")

if _, err := c.InsertOne(context.Background(), user); err != nil {

    // handle error

}

该my类型的目的是避免堆栈溢出。


查看完整回答
反对 回复 2022-12-05
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信