4 Star 5 Fork 5

Plato/Service-Box-go

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
mongodb.go 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
renlytong 提交于 2023-02-16 17:08 +08:00 . !7fix: mongo col concurrency
package mongodb
import (
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"sync"
)
type (
MongoDB struct {
//options mongo需要的配置
options *Options
//client mongo 客户端
client *mongo.Client
//collections Collection缓存
collections *sync.Map
}
)
func NewMongoDB(opts ...Option) *MongoDB {
option := &Options{}
for _, opt := range opts {
opt(option)
}
return &MongoDB{
option,
nil,
&sync.Map{},
}
}
//Init 初始化, 处理用户配置,生成mongo uri
func (db *MongoDB) Init(opts ...Option) error {
for _, opt := range opts {
opt(db.options)
}
uri, err := db.options.genMongoUri()
if err != nil {
return err
}
// 连接到mongo
db.client, err = mongo.Connect(context.Background(), options.Client().ApplyURI(uri))
if err != nil {
return err
}
return nil
}
func (db *MongoDB) Start() error {
// ping 测试连通性, 确定已经连接好
err := db.client.Ping(context.Background(), readpref.Primary())
if err != nil {
return err
}
return nil
}
func (db *MongoDB) UnInit() error {
db.collections = nil
return db.client.Disconnect(context.Background())
}
func (db *MongoDB) IsInvalid() bool {
return db.client != nil
}
func (db *MongoDB) GetCollection(name string) *mongo.Collection {
if co, ok := db.collections.Load(name); ok {
return co.(*mongo.Collection)
}
co := db.client.Database(db.options.DB).Collection(name)
db.collections.Store(name, co)
return co
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/dennis-kk/service-box-go.git
git@gitee.com:dennis-kk/service-box-go.git
dennis-kk
service-box-go
Service-Box-go
v0.5.25

搜索帮助