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 关注
- 304 浏览
添加回答
举报
0/150
	提交
		取消
	