首頁 >後端開發 >Golang >如何使用 Go 的 Mgo 定義 MongoDB 文件中的預設日期?

如何使用 Go 的 Mgo 定義 MongoDB 文件中的預設日期?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-22 17:03:531055瀏覽

How to Define Default Dates in MongoDB Documents Using Go's Mgo?

使用 Go 的 Mgo 定義 Mongo 文件中的預設日期

在 MongoDB 中,為文件欄位定義預設時間戳記是很常見的。然而,在 Go with Mgo 中,沒有直接的方法來設定欄位的預設值。

具有預設值的自訂建構子

一種方法是建立一個填入預設值的自訂建構子:

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}

這確保使用此建構函數建立的每個新User 結構都將具有預設的CreatedAt

自訂GetBSON Marshaler

另一個選項是使用BSON 的bson.Getter 介面實現自訂序列化邏輯:

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}

將User 編組到BSON 時,此GetBSON 函數將被調用,並用當前時間填入CreatedAt 欄位(如果還沒有)

注意事項

請注意,無論使用哪種方法,即使更新現有文檔,CreatedAt 字段也會被當前時間覆蓋。為了避免這種情況,您可以在 GetBSON 中新增一個檢查,以僅在欄位為零值時設定該欄位。

此外,自訂封送處理方法要求您為包含 time.Time 的任何類型實作 bson.Getter具有預設值的欄位。

以上是如何使用 Go 的 Mgo 定義 MongoDB 文件中的預設日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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