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

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)。


有只小跳蛙
浏览 217回答 1
1回答

牧羊人nacy

MongoDB 服务器不支持这个。您可以实施自定义封送拆收器,您可以在其中根据自己的喜好更新这些字段。实现bson.Marshaler,MarshalBSON()当您保存您的*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类型的目的是避免堆栈溢出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go