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)。
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
MongoDB 服务器不支持这个。
您可以实施自定义封送拆收器,您可以在其中根据自己的喜好更新这些字段。实现bson.Marshaler
,MarshalBSON()
当您保存您的*User
类型的值时,您的函数将被调用。
这就是它的样子:
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类型的目的是避免堆栈溢出。
- 1 回答
- 0 关注
- 216 浏览
添加回答
举报
0/150
提交
取消