首頁 > 後端開發 > Golang > 如何使用 Go 的 BSON Marshaler 自動化 MongoDB 中的 Created_at 和 Updated_at 時間戳記?

如何使用 Go 的 BSON Marshaler 自動化 MongoDB 中的 Created_at 和 Updated_at 時間戳記?

DDD
發布: 2024-12-05 09:22:10
原創
266 人瀏覽過

How to Automate Created_at and Updated_at Timestamps in MongoDB using Go's BSON Marshaler?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板