使用Go 的MongoDB 驅動程式將結構體插入MongoDB 欄位時,created_at 和為dated_at 字段為設定為零時間(0001-01-01T00:00:00.000 00:00)。這可能不是所需的行為,特別是如果這些欄位需要儲存建立和修改的實際時間。
MongoDB 伺服器本身不支援自動填入created_at 和Updated_at 欄位。但是,您可以透過建立自訂封送拆收器來實現此功能。
為您的 User 類型實作 bson.Marshaler 介面。這將允許您自訂結構在插入資料庫之前如何編組為 BSON。
自訂編組器的 MarshalBSON 方法應執行下列步驟:
以下是自訂編組器的範例:
func (user *User) MarshalBSON() ([]byte, error) { if user.CreatedAt.IsZero() { user.CreatedAt = time.Now() } user.UpdatedAt = time.Now() type my User return bson.Marshal((*my)(user)) }
要使用自訂封送拆收器,請記得在將User結構插入到的任何位置都使用它使用InsertOne 方法插入資料庫。您必須將指向 User 結構的指標作為參數傳遞。
範例:
user := &User{Name: "username"} c := client.Database("db").Collection("collection") if _, err := c.InsertOne(context.Background(), user); err != nil { // handle error }
請注意,如果將自訂封送拆收器嵌入到更大的結構中,則自訂封送拆收器將無法運作。為了避免此問題,您可以對整個嵌入結構使用自訂封送拆收器。
以上是如何在 MongoDB 插入之前自動填入 Go 結構中的「created_at」和「updated_at」欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!