Skip to content

内置 Model

go mongox内置了一个Model结构体,它包含了IDCreatedAtUpdatedAt三个字段。

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 和时间的赋值。

具体来说,创建文档(InsertOneInsertMany)时会调用DefaultId()DefaultCreatedAt()方法来初始化IDCreatedAt字段;更新文档(UpdateOneUpdateManyUpdatesWithOperator)时,会调用DefaultUpdatedAt()方法来更新UpdatedAt字段的值;而在执行保存(Upsert)操作时,会同时调用这三个方法来确保所有相关字段都被正确初始化或更新。

你可以把它嵌入到自己定义的结构体中,如下所示:

go
type User struct {
	mongox.Model `bson:"inline"`
	Name         string `bson:"name"`
	Age          int    `bson:"age"`
}