更新日志
v2.11.0
v2.11.0 版本主要升级 Go 版本要求和 MongoDB Go Driver,并改进开发工具安装脚本及 CI 工作流。
升级注意事项
- Go 版本要求:最低 Go 版本从
1.19提升至1.25.0,升级前请同步更新本地开发和 CI 环境中的 Go 工具链。
依赖更新
MongoDB Go Driver:将go.mongodb.org/mongo-driver/v2从v2.7.0升级至v2.9.0。- 间接依赖:更新
github.com/klauspost/compress至v1.19.2、golang.org/x/crypto至v0.53.0、golang.org/x/sync至v0.21.0、golang.org/x/text至v0.39.0。
开发工具与 CI
- 开发环境初始化:
script/setup.sh改用golangci-lint/v2,支持通过GOLANGCI_LINT_VERSION和GOIMPORTS_VERSION环境变量指定工具版本,默认安装latest;工具安装失败时立即退出。 - CI 工具链:各工作流统一从
go.mod读取 Go 版本,升级actions/checkout至v5、actions/setup-go至v6、golangci/golangci-lint-action至v8,并固定 CI 中的golangci-lint为v2.4.0、goimports为v0.36.0。 - 测试与覆盖率:移除集成测试脚本执行时的
sudo;升级codecov/codecov-action至v5,移除重复的覆盖率上传步骤,并明确上传cover.out。
相关变更
v2.10.0
v2.10.0 版本于北京时间 2026-06-30 发布。该版本主要修复了自动时间字段在不兼容类型和精度标签组合下的处理逻辑,并将 MongoDB Go Driver 升级至 v2.7.0。
修复
- 自动时间字段类型兼容性:修复了
mongox:"autoCreateTime"和mongox:"autoUpdateTime"在time.Time、int、int64等字段类型上的解析和赋值逻辑,避免为字段写入不兼容的时间值。 - 精度标签处理:当
time.Time字段错误使用:second、:milli、:nano等时间戳精度标签时,现在会忽略该自动时间配置,避免将Unix时间戳写入time.Time字段。 - 自定义整数类型赋值:自动时间字段在写入
Unix时间戳时,支持将生成的时间值转换为可兼容的目标整数类型。 - 批量文档字段钩子:补充了批量执行字段钩子时的错误返回测试,确保执行过程中出现错误时可以正确透传。
依赖更新
MongoDB Go Driver:将go.mongodb.org/mongo-driver/v2从v2.5.0升级至v2.7.0。
相关文档
- 文档模型 已同步更新自动时间字段的使用说明。
v2.2.0
v2.2.0 版本于北京时间 2025-02-08 发布。该版本做了非常多的改动,主要包括:
新增
- Aggregator 操作器":支持注册
Hook,可以在聚合操作的前后插入自定义的逻辑。 - Hook/Plugin 类型:添加了
前*和后*的钩子类型。 - mongox.model:为
ID字段添加了mongox:autoID标签,用于自动生成ID。
重构
- mongox.Client 结构体:添加了
mongox.Client结构体,目前该结构体只用于创建Database对象。后续会增加更多的功能,例如事务的封装等。 - mongox.Database 结构体:添加了
mongox.Database结构体,可用于支持注册插件,提供了一种灵活的方式在数据库操作的前后插入自定义的逻辑,从而增强应用的可扩展性和可维护性。 - mongox.NewCollection:更新了
mongox.NewCollection方法的签名,现在另需要传入mongox.Database对象。 - Model Field Hook 重构:将
model field hook移动至internal包,并重构以支持标签化,从而在插入和更新文档时自动填充字段值。这样可以减少重复的代码,提升代码的可维护性和可读性。
删除
- 全局插件:删除了全局注册插件的使用方式,现在只能在
mongox.Database上注册插件。 - Validation Hooks:删除了
validation校验结构体的hook。 - 插件初始化函数:删除了
mongox.InitPlugin。
函数和方法用法的变化
mongox.NewCollectiongo// 以前 userColl := mongox.NewCollection[User](mongoColl) // 现在 client := mongox.NewClient(mongoClient, &mongox.Config{}) database := client.NewDatabase("db-test") userColl := mongox.NewCollection[User](database, "users")插件注册与删除
go// 以前 mongox.RegisterPlugin() mongox.RemovePlugin() // 现在 client := mongox.NewClient(mongoClient, &mongox.Config{}) database := client.NewDatabase("db-test") database.RegisterPlugin() database.RemovePlugin()