在 MongoDB 中,為文件欄位定義預設時間戳記是很常見的。然而,在 Go with Mgo 中,沒有直接的方法來設定欄位的預設值。
一種方法是建立一個填入預設值的自訂建構子:
func NewUser() *User { return &User{ CreatedAt: time.Now(), } }
這確保使用此建構函數建立的每個新User 結構都將具有預設的CreatedAt
另一個選項是使用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中文網其他相關文章!