在MongoDB 的Golang 結構中加入自動Created_at 和Updated_at 欄位
使用Go 結構將資料插入MongoDB 需要處理填充和_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中文網其他相關文章!