在MongoDB 中自動填入Created_at 和Updated_at 欄位
在提供的Go 程式碼片段中,User 結構體定義了_id、created_at 、updated_at 字段,和名字。當使用 InsertOne() 將新的 User 物件插入資料庫時,created_at 和 Updated_at 欄位不會自動填入時間戳記。
問題: 如何在中使用自動的created_at 和updated_at提供的 Go 程式碼僅使用 MongoDB 驅動程式?
解決方案: MongoDB 伺服器不會自動處理這些欄位的時間戳記的自動填入。但是,您可以透過為 User 結構實作自訂封送拆收器來手動實現此功能。
要建立自訂封送拆收器,請實作 bson.Marshaler 介面。當 *User 類型的值被編組以插入資料庫時,將呼叫 MarshalBSON() 方法。
以下是如何實現此功能的範例:
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"} err := client.Database("db").Collection("collection").InsertOne(context.Background(), user) if err != nil { // handle error }
我的類型的目的是避免編組過程中堆疊溢位。
以上是如何使用 Go 的 BSON Marshaler 自動化 MongoDB 中的 Created_at 和 Updated_at 時間戳記?的詳細內容。更多資訊請關注PHP中文網其他相關文章!