首页 >后端开发 >Golang >如何使用 Go 的 BSON Marshaler 自动填充 MongoDB 中的 Created_at 和 Updated_at 字段?

如何使用 Go 的 BSON Marshaler 自动填充 MongoDB 中的 Created_at 和 Updated_at 字段?

DDD
DDD原创
2024-11-24 20:35:14923浏览

How to Automatically Populate Created_at and Updated_at Fields in MongoDB using Go's BSON Marshaler?

使用 Go 数据库驱动程序在 MongoDB 中自动创建 Created_at 和 Updated_at 字段

在 Go 中,当使用 MongoDB 数据库驱动程序时,created_at结构体中的 update_at 字段在插入期间不会自动填充时间戳。为了解决这个问题,可以实现一个自定义封送拆收器来在将结构保存到 MongoDB 之前更新这些字段。

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"`
}

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 类型的值时调用 MarshalBSON() 方法,并确保在将对象编组为 BSON 表示之前,created_at 和 Updated_at 字段设置为当前时间。

要使用此自定义编组器,请实例化一个指针到您的 User 对象并将其插入到 MongoDB 集合中:

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

c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
    // handle error
}

通过实现 MarshalBSON() 方法,您可以在将 Go 结构体保存到 MongoDB 时自动为created_at和updated_at字段生成时间戳,从而确保字段已正确填充当前时间。

以上是如何使用 Go 的 BSON Marshaler 自动填充 MongoDB 中的 Created_at 和 Updated_at 字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn