首页 > 后端开发 > Golang > 如何使用 Go 的 BSON Marshaler 自动化 MongoDB 中的 Created_at 和 Updated_at 时间戳?

如何使用 Go 的 BSON Marshaler 自动化 MongoDB 中的 Created_at 和 Updated_at 时间戳?

DDD
发布: 2024-12-05 09:22:10
原创
266 人浏览过

How to Automate Created_at and Updated_at Timestamps in MongoDB using Go's BSON Marshaler?

在 MongoDB 中自动填充 Created_at 和 Updated_at 字段

在提供的 Go 代码片段中,User 结构体定义了 _id、created_at、updated_at 字段,和名字。当使用 InsertOne() 将新的 User 对象插入数据库时​​,created_at 和 Updated_at 字段不会自动填充时间戳。

问题: 如何在中使用自动的created_at 和updated_at提供的 Go 代码仅使用 MongoDB 驱动程序?

解决方案: MongoDB 服务器不会自动处理这些字段的时间戳的自动填充。但是,您可以通过为 User 结构实现自定义封送拆收器来手动实现此功能。

要创建自定义封送拆收器,请实现 bson.Marshaler 接口。当 *User 类型的值被编组以插入数据库时​​,将调用 MarshalBSON() 方法。

以下是如何实现此功能的示例:

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))
}
登录后复制

请注意MarshalBSON() 方法有一个指针接收器,因此在以下情况下必须使用指向 User 值的指针:插入:

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

err := client.Database("db").Collection("collection").InsertOne(context.Background(), user)
if err != nil {
    // handle error
}
登录后复制

我的类型的目的是避免编组过程中堆栈溢出。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板