一个基于 go-mongox v2 构建的 MongoDB ORM 封装库,提供了简洁易用的数据库操作接口。
cnb.cool/xqitw/kelove-mongoxmongo/ ├── 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 # 日志记录器
go get cnb.cool/xqitw/kelove-mongox
在 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"
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
}
// 创建默认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连接管理和客户端获取功能:
通用数据访问引擎,提供:
Create: 从任意结构体创建CreateWithModel: 从模型创建Read: 单条查询ReadList: 列表查询ReadListPagination: 分页查询UpdateWithMap: 使用map更新UpdateWithFilter: 带过滤条件更新UpdateWithRequestJson: 从请求JSON更新Delete: 单条删除DeleteMany: 批量删除支持多种查询操作符:
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)
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:27017 | 192.168.0.62:27017 |
user | 数据库用户名 | kelove_admin | dn |
pass | 数据库密码 | password_kelove_admin | your_password |
db | 默认数据库名 | kelove_admin | dn |
other | 其他连接参数 | 空 | ?authSource=admin |
mongoSetDirect | 是否直连模式 | false | true |
可通过环境变量覆盖配置:
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")
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"` // 结果列表
}
集成GF框架日志系统,自动记录MongoDB操作日志。
MIT License