推入 mongodb 时自动填充 golang 结构中的 created_at 和 updated_at
Autofill created_at and updated_at in golang struct while pushing into 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"`
}
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)
MongoDB 服务器不支持此功能。
您可以实施自定义封送拆收器,您可以在其中根据自己的喜好更新这些字段。实施 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))
}
请注意该方法有指针接收器,因此请使用指向您的值的指针:
user := &User{Name: "username"}
c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
// handle error
}
my
类型的目的是避免堆栈溢出。
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)MongoDB 服务器不支持此功能。
您可以实施自定义封送拆收器,您可以在其中根据自己的喜好更新这些字段。实施 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))
}
请注意该方法有指针接收器,因此请使用指向您的值的指针:
user := &User{Name: "username"}
c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
// handle error
}
my
类型的目的是避免堆栈溢出。