在 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中文网其他相关文章!