logo
0
0
WeChat Login

Kelove Mongox

一个基于 go-mongox v2 构建的 MongoDB ORM 封装库,提供了简洁易用的数据库操作接口。

特性

  • 🚀 基于 go-mongox v2 构建,性能优异
  • 🔧 支持多数据库连接管理
  • 📦 完整的 CRUD 操作封装
  • 🔄 事务支持
  • 📄 分页查询支持
  • 🔍 灵活的查询构建器
  • 🛠️ 丰富的工具函数
  • 📁 模块路径:cnb.cool/xqitw/kelove-mongox

目录结构

mongo/ ├── dao/ # 数据访问对象层 │ ├── base.go # 基础引擎定义 │ ├── build.go # 查询构建器 │ ├── create.go # 创建操作 │ ├── delete.go # 删除操作 │ ├── read.go # 读取操作 │ ├── update.go # 更新操作 │ ├── transaction.go # 事务操作 │ └── dao_test.go # 测试文件 ├── model/ # 模型定义 │ └── base.go # 基础模型接口 ├── pagination/ # 分页支持 │ └── pagination.go ├── utils/ # 工具函数 │ └── utils.go ├── mongo.go # 核心MongoDB客户端 └── mongo_logger.go # 日志记录器

快速开始

1. 安装项目

go get cnb.cool/xqitw/kelove-mongox

2. 配置数据库连接

在 gf/v2 框架的配置文件中添加MongoDB配置:

[mongo.default] address = "192.168.0.62:27017" user = "dn" pass = "your_password" db = "dn" [mongo.queue] address = "192.168.0.62:27017" user = "dn" pass = "your_password" db = "dn_queue" other = "?authSource=admin"

3. 定义模型

type User struct { ID primitive.ObjectID `bson:"_id,omitempty"` Name string `bson:"name"` Age int `bson:"age"` } func (u User) Name(ctx context.Context) string { return "users" } func (u User) Indexes(ctx context.Context) []mongo.IndexModel { return []mongo.IndexModel{ { Keys: bson.D{{"name", 1}}, }, } } func (u User) Init(ctx context.Context) error { return nil } // 队列任务模型示例 type QueueTask struct { ID primitive.ObjectID `bson:"_id,omitempty"` Type string `bson:"type"` Status string `bson:"status"` Data map[string]any `bson:"data,omitempty"` } func (q QueueTask) Name(ctx context.Context) string { return "queue_tasks" } func (q QueueTask) Indexes(ctx context.Context) []mongo.IndexModel { return []mongo.IndexModel{ { Keys: bson.D{{"status", 1}}, }, { Keys: bson.D{{"type", 1}}, }, } } func (q QueueTask) Init(ctx context.Context) error { return nil }

4. 使用示例

// 创建默认DAO引擎 engine := dao.NewEngineSimple[User]() // 创建用户 user := User{Name: "张三", Age: 25} createdUser, err := engine.Create(context.Background(), user) // 使用特定数据库实例 queueEngine := dao.NewEngineSimple[QueueTask]("dn_queue") queueTask := QueueTask{Type: "email", Status: "pending"} createdTask, err := queueEngine.Create(context.Background(), queueTask) // 查询单个用户 result, err := engine.Read(context.Background(), dao.WithMapBuilder(map[string]any{"name": "张三"})) // 分页查询 pagination := &pagination.StandardPagination{Page: 1, PageSize: 10} results, err := engine.ReadListPagination( context.Background(), pagination, []string{"-created_at"}, // 排序字段 dao.WithMapBuilder(map[string]any{"age__gte": 18})) // 查询条件 // 更新用户 updatedUser, err := engine.UpdateWithMap( context.Background(), map[string]any{"age": 26}, dao.WithIdBuilder(user.ID)) // 删除用户 err = engine.Delete(context.Background(), dao.WithIdBuilder(user.ID))

核心组件

MongoDB客户端 (mongo.go)

提供MongoDB连接管理和客户端获取功能:

  • 支持多实例配置
  • 自动连接池管理
  • 连接健康检查

DAO引擎 (dao/base.go)

通用数据访问引擎,提供:

  • 集合操作接口
  • 客户端获取方法
  • 数据库切换支持

CRUD操作

创建 (dao/create.go)

  • Create: 从任意结构体创建
  • CreateWithModel: 从模型创建

读取 (dao/read.go)

  • Read: 单条查询
  • ReadList: 列表查询
  • ReadListPagination: 分页查询

更新 (dao/update.go)

  • UpdateWithMap: 使用map更新
  • UpdateWithFilter: 带过滤条件更新
  • UpdateWithRequestJson: 从请求JSON更新

删除 (dao/delete.go)

  • Delete: 单条删除
  • DeleteMany: 批量删除

查询构建器 (dao/build.go)

支持多种查询操作符:

  • eq/ne: 等于/不等于
  • gt/gte/lt/lte: 大于/大于等于/小于/小于等于
  • in/nin: 包含/不包含
  • contains/icontains: 字符串包含(忽略大小写)
  • regex: 正则表达式匹配

使用示例:

// 复合查询条件 conditions := map[string]any{ "age__gte": 18, "name__icontains": "张", "status__in": []string{"active", "pending"}, } builder := dao.WithMapBuilder(conditions)

事务支持 (dao/transaction.go)

result, err := engine.WithTransaction(ctx, func(ctx context.Context) (any, error) { // 事务内的操作 _, err := engine.Create(ctx, user1) if err != nil { return nil, err } _, err = engine.Create(ctx, user2) if err != nil { return nil, err } return "success", nil })

配置说明

项目基于 gf/v2 框架,支持其标准的 TOML 配置文件格式。

配置参数

参数说明默认值示例
address数据库地址和端口mongo:27017192.168.0.62:27017
user数据库用户名kelove_admindn
pass数据库密码password_kelove_adminyour_password
db默认数据库名kelove_admindn
other其他连接参数?authSource=admin
mongoSetDirect是否直连模式falsetrue

环境变量支持

可通过环境变量覆盖配置:

export MONGO_DEFAULT_ADDRESS="192.168.0.62:27017" export MONGO_DEFAULT_USER="dn" export MONGO_DEFAULT_PASS="your_password" export MONGO_DEFAULT_DB="dn"

多数据库支持

// 使用特定配置 client := mongo.Get[User](ctx, "secondary") // 在DAO中指定数据库 engine := dao.NewEngineSimple[User]("secondary_db")

工具函数 (utils/utils.go)

  • FilterMapByKeys: Map键值过滤
  • DeepCopy: 深度拷贝
  • Copy: 浅拷贝

标准分页响应结构:

type StandardPaginationRes[T any] struct { Count int64 `json:"count"` // 总数 Next int64 `json:"next"` // 下一页 Previous int64 `json:"previous"` // 上一页 Results []*T `json:"results"` // 结果列表 }

日志记录 (mongo_logger.go)

集成GF框架日志系统,自动记录MongoDB操作日志。

许可证

MIT License

About

mongox封装

1.03 MiB
616.59 KiB
0 forks0 stars2 branches15 TagREADMEMIT license