在 MongoDB 的 Golang 结构中添加自动 Created_at 和 Updated_at 字段
使用 Go 结构将数据插入 MongoDB 需要处理created_at 的自动填充和 Updated_at 字段,MongoDB 本身并不支持该功能server.
要解决此问题,请考虑通过实现 bson.Marshaler 接口来实现自定义封送拆收器。 MarshalBSON() 函数将在持久化 User 类型的值时被调用。
这是演示实现的代码片段:
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)) }
请注意,MarshalBSON() 方法使用指针接收者,因此需要使用指向 User 实例的指针。
示例用法:
user := &User{Name: "username"} c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), user); err != nil { // handle error }
通过使用此技术,您可以在通过 Go 结构插入或更新 MongoDB 文档时自动更新created_at和updated_at字段。
以上是如何使用 Go 自动将 Created_at 和 Updated_at 时间戳添加到 MongoDB 文档?的详细内容。更多信息请关注PHP中文网其他相关文章!