使用Golang 自動執行MongoDB 中的Created_at 和Updated_at 欄位
在提供的程式碼片段中,User 結構程式結構對Created_at 和Upeated Up的自動化。這些欄位對於追蹤時間事件至關重要。
解決方案
MongoDB 伺服器缺乏自動欄位填充的支援。為此,您可以為 User 結構實作自訂封送處理函數。透過實作 bson.Marshaler 接口,您可以控制結構體如何序列化為 BSON。
實作
以下是如何實作MarshalBSON 函數:
import ( "context" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" ) 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 值的指標。
用法
實現自訂封送功能後,您可以像這樣使用它:
client := mongo.NewClient(...) // (redacted for brevity) c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), &user); err != nil { // handle error }
說明
說明 MarshalBSON函數檢查如果created_at欄位為空,則將其設為目前時間。然後它將 Updated_at 欄位設定為當前時間。透過使用類型別名 (my) 並將 User 結構強制轉換為 *my,可以避免編組過程中潛在的堆疊溢位。以上是如何使用 Golang 在 MongoDB 中自動建立 Created_at 和 Updated_at 時間戳記?的詳細內容。更多資訊請關注PHP中文網其他相關文章!