首頁 > 後端開發 > Golang > 如何使用 Golang 在 MongoDB 中自動建立 Created_at 和 Updated_at 時間戳記?

如何使用 Golang 在 MongoDB 中自動建立 Created_at 和 Updated_at 時間戳記?

Linda Hamilton
發布: 2024-12-06 13:17:11
原創
1020 人瀏覽過

How to Automate Created_at and Updated_at Timestamps in MongoDB using Golang?

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

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