内置 Model
go mongox
内置了一个Model
结构体,它包含了ID
、CreatedAt
和UpdatedAt
三个字段。
go
type Model struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
CreatedAt time.Time `bson:"created_at"`
UpdatedAt time.Time `bson:"updated_at"`
}
func (m *Model) DefaultId() {
if m.ID.IsZero() {
m.ID = primitive.NewObjectID()
}
}
func (m *Model) DefaultCreatedAt() {
if m.CreatedAt.IsZero() {
m.CreatedAt = time.Now().Local()
}
}
func (m *Model) DefaultUpdatedAt() {
m.UpdatedAt = time.Now().Local()
}
这个结构体通过实现DefaultModelHook
接口,如果初始化插件时将 EnableDefaultFieldHook
设置为 true
(详情请参考 启用内置插件-钩子 ),go mongox
库将自动化地处理文档的创建、更新操作中的 ID
和时间的赋值。
具体来说,创建文档(InsertOne
、InsertMany
)时会调用DefaultId()
和DefaultCreatedAt()
方法来初始化ID
和CreatedAt
字段;更新文档(UpdateOne
、UpdateMany
、UpdatesWithOperator
)时,会调用DefaultUpdatedAt()
方法来更新UpdatedAt
字段的值;而在执行保存(Upsert
)操作时,会同时调用这三个方法来确保所有相关字段都被正确初始化或更新。
你可以把它嵌入到自己定义的结构体中,如下所示:
go
type User struct {
mongox.Model `bson:"inline"`
Name string `bson:"name"`
Age int `bson:"age"`
}