mongodb-golisted
Install: claude install-skill omeyang/Thoth
# Go MongoDB 专家
使用 Go mongo-driver 开发 MongoDB 功能:$ARGUMENTS
---
## 1. 连接管理
### 创建客户端
```go
func NewMongoClient(ctx context.Context, uri string) (*mongo.Client, error) {
opts := options.Client().
ApplyURI(uri).
SetMaxPoolSize(100).
SetMinPoolSize(10).
SetMaxConnIdleTime(30 * time.Minute).
SetServerSelectionTimeout(5 * time.Second).
SetConnectTimeout(10 * time.Second)
client, err := mongo.Connect(opts)
if err != nil {
return nil, fmt.Errorf("connect mongo: %w", err)
}
if err := client.Ping(ctx, readpref.Primary()); err != nil {
return nil, fmt.Errorf("ping mongo: %w", err)
}
return client, nil
}
```
### 包装器模式
XKit 的 xmongo 采用**最小包装**策略:只提供增值功能(分页、批量写入、慢查询监控、健康检查),其他操作通过 `Client()` 直接使用 mongo-driver API。
```go
type Mongo interface {
Client() *mongo.Client // 暴露底层客户端
Health(ctx context.Context) error // Ping 健康检查
Stats() Stats // 统计信息
Close(ctx context.Context) error // 关闭连接
FindPage(ctx context.Context, coll *mongo.Collection, // 分页查询
filter any, opts PageOptions) (*PageResult, error)
BulkWrite(ctx context.Context, coll *mongo.Collection, // 批量写入
docs []any, opts BulkOptions) (*BulkResult, error)
}
```
**设计原则**:不包装所有 API。CRUD、聚合、索引操作通过 `Client()` 直接使用 mongo-driver 原生方法。
> 完整包装器实现见 [references/examples.md](refer