首頁 >後端開發 >Golang >如何使用 Go 的 BSON Marshaler 自動填入 MongoDB 中的 Created_at 和 Updated_at 欄位?

如何使用 Go 的 BSON Marshaler 自動填入 MongoDB 中的 Created_at 和 Updated_at 欄位?

DDD
DDD原創
2024-11-24 20:35:14921瀏覽

How to Automatically Populate Created_at and Updated_at Fields in MongoDB using Go's BSON Marshaler?

使用Go 資料庫驅動程式在MongoDB 中自動建立Created_at 和Updated_at 欄位

在Go 中,當使用MongoDB 資料庫created_at結構體中的update_at 欄位在插入期間不會自動填入時間戳記。為了解決這個問題,可以實作一個自訂封送拆收器來在將結構儲存到 MongoDB 之前更新這些欄位。

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))
}

在儲存 *User 類型的值時呼叫 MarshalBSON() 方法,並確保在將物件編組為 BSON 表示之前,created_at 和 Updated_at 欄位設定為目前時間。

要使用此自訂編組器,請實例化一個指標到您的User 物件並將其插入MongoDB 集合中:

user := &User{Name: "username"}

c := client.Database("db").Collection("collection")
if _, err := c.InsertOne(context.Background(), user); err != nil {
    // handle error
}

透過實作MarshalBSON() 方法,您可以在將Go 結構體儲存到MongoDB 時自動為created_at和updated_at欄位產生時間戳,從而確保欄位已正確填入目前時間。

以上是如何使用 Go 的 BSON Marshaler 自動填入 MongoDB 中的 Created_at 和 Updated_at 欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn