From f1530064e9bb325a6643ff8302cea8ecef9bf8c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Wed, 21 Sep 2022 10:58:43 +0800 Subject: [PATCH] - update mongo --- const.go | 2 +- mongo.go | 25 +++++++++++++++---------- mongo_collection.go | 8 ++++++-- mongo_database.go | 10 +++++++--- mongo_get.go | 2 +- mongo_session.go | 12 +++++++----- mongo_session_collection.go | 12 ++++++++---- mongo_session_database.go | 14 +++++++++----- 8 files changed, 54 insertions(+), 31 deletions(-) diff --git a/const.go b/const.go index 0d67379..8122113 100644 --- a/const.go +++ b/const.go @@ -1,3 +1,3 @@ package dorm -const Version = "1.0.39" +const Version = "1.0.40" diff --git a/mongo.go b/mongo.go index f11ad2a..24acf2b 100644 --- a/mongo.go +++ b/mongo.go @@ -17,38 +17,43 @@ type MongoClientFun func() (*MongoClient, string) // string 集合 type MongoClientCollectionFun func() (*MongoClient, string, string) -type ConfigMongoClient struct { +// MongoClientConfig 实例配置 +type MongoClientConfig struct { Dns string // 地址 Opts *options.ClientOptions DatabaseName string // 库名 } +// MongoClient 实例 type MongoClient struct { - Db *mongo.Client // 驱动 - config *ConfigMongoClient // 配置 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 } -func NewMongoClient(config *ConfigMongoClient) (*MongoClient, error) { +// NewMongoClient 创建实例 +func NewMongoClient(config *MongoClientConfig) (*MongoClient, error) { var ctx = context.Background() var err error - c := &MongoClient{config: config} + c := &MongoClient{} + + c.configDatabaseName = config.DatabaseName // 连接到MongoDB - if c.config.Dns != "" { - c.Db, err = mongo.Connect(ctx, options.Client().ApplyURI(c.config.Dns)) + if config.Dns != "" { + c.db, err = mongo.Connect(ctx, options.Client().ApplyURI(config.Dns)) if err != nil { return nil, errors.New(fmt.Sprintf("连接失败:%v", err)) } } else { - c.Db, err = mongo.Connect(ctx, c.config.Opts) + c.db, err = mongo.Connect(ctx, config.Opts) if err != nil { return nil, errors.New(fmt.Sprintf("连接失败:%v", err)) } } // 检查连接 - err = c.Db.Ping(ctx, nil) + err = c.db.Ping(ctx, nil) if err != nil { return nil, errors.New(fmt.Sprintf("检查连接失败:%v", err)) } @@ -58,5 +63,5 @@ func NewMongoClient(config *ConfigMongoClient) (*MongoClient, error) { // Close 关闭 func (c *MongoClient) Close(ctx context.Context) error { - return c.Db.Disconnect(ctx) + return c.db.Disconnect(ctx) } diff --git a/mongo_collection.go b/mongo_collection.go index a84bfb6..0488037 100644 --- a/mongo_collection.go +++ b/mongo_collection.go @@ -8,13 +8,17 @@ import ( ) type MongoCollectionOptions struct { - dbCollection *mongo.Collection // 集合 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 + dbCollection *mongo.Collection // 集合 } // Collection 选择集合 func (cd *MongoDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoCollectionOptions { return &MongoCollectionOptions{ - dbCollection: cd.dbDatabase.Collection(name, opts...), + db: cd.db, // 驱动 + configDatabaseName: cd.configDatabaseName, // 库名 + dbCollection: cd.dbDatabase.Collection(name, opts...), // 集合 } } diff --git a/mongo_database.go b/mongo_database.go index fb8bc3b..af7d3ee 100644 --- a/mongo_database.go +++ b/mongo_database.go @@ -8,13 +8,17 @@ import ( ) type MongoDatabaseOptions struct { - dbDatabase *mongo.Database // 数据库 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 + dbDatabase *mongo.Database // 数据库 } // Database 选择数据库 func (c *MongoClient) Database(name string, opts ...*options.DatabaseOptions) *MongoDatabaseOptions { return &MongoDatabaseOptions{ - dbDatabase: c.Db.Database(name, opts...), + db: c.db, // 驱动 + configDatabaseName: c.configDatabaseName, // 库名 + dbDatabase: c.db.Database(name, opts...), // 数据库 } } @@ -42,7 +46,7 @@ func (c *MongoClient) Model(value interface{}) *MongoCollectionOptions { databaseName := methodValue.Call(nil)[0].String() databaseOptions = c.Database(databaseName) } else { - panic(NoConfigDatabaseName) + databaseOptions = c.Database(c.configDatabaseName) } if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() { diff --git a/mongo_get.go b/mongo_get.go index eaa58b5..7aea68b 100644 --- a/mongo_get.go +++ b/mongo_get.go @@ -4,5 +4,5 @@ import "go.mongodb.org/mongo-driver/mongo" // GetDb 获取驱动 func (c *MongoClient) GetDb() *mongo.Client { - return c.Db + return c.db } diff --git a/mongo_session.go b/mongo_session.go index b66ded2..5b1d406 100644 --- a/mongo_session.go +++ b/mongo_session.go @@ -8,9 +8,10 @@ import ( ) type MongoSessionOptions struct { - Session mongo.SessionContext // 会话 - Db *mongo.Client // 驱动 - startSession mongo.Session // 开始会话 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 + startSession mongo.Session // 开始会话 + Session mongo.SessionContext // 会话 } // Begin 开始事务,会同时创建开始会话需要在退出时关闭会话 @@ -18,10 +19,11 @@ func (c *MongoClient) Begin() (ms *MongoSessionOptions, err error) { var ctx = context.Background() - ms.Db = c.Db + ms.db = c.db + ms.configDatabaseName = c.configDatabaseName // 开始会话 - ms.startSession, err = ms.Db.StartSession() + ms.startSession, err = ms.db.StartSession() if err != nil { return nil, errors.New(fmt.Sprintf("开始会话失败:%v", err)) } diff --git a/mongo_session_collection.go b/mongo_session_collection.go index 31e3905..f2b17de 100644 --- a/mongo_session_collection.go +++ b/mongo_session_collection.go @@ -6,14 +6,18 @@ import ( ) type MongoSessionCollectionOptions struct { - session mongo.SessionContext // 会话 - dbCollection *mongo.Collection // 集合 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 + session mongo.SessionContext // 会话 + dbCollection *mongo.Collection // 集合 } // Collection 选择集合 func (csd *MongoSessionDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoSessionCollectionOptions { return &MongoSessionCollectionOptions{ - session: csd.session, // 会话 - dbCollection: csd.dbDatabase.Collection(name, opts...), // 集合 + db: csd.db, // 驱动 + configDatabaseName: csd.configDatabaseName, // 库名 + session: csd.session, // 会话 + dbCollection: csd.dbDatabase.Collection(name, opts...), // 集合 } } diff --git a/mongo_session_database.go b/mongo_session_database.go index f6ed0e7..d040a1c 100644 --- a/mongo_session_database.go +++ b/mongo_session_database.go @@ -7,15 +7,19 @@ import ( ) type MongoSessionDatabaseOptions struct { - session mongo.SessionContext // 会话 - dbDatabase *mongo.Database // 数据库 + db *mongo.Client // 驱动 + configDatabaseName string // 库名 + session mongo.SessionContext // 会话 + dbDatabase *mongo.Database // 数据库 } // Database 选择数据库 func (cs *MongoSessionOptions) Database(name string, opts ...*options.DatabaseOptions) *MongoSessionDatabaseOptions { return &MongoSessionDatabaseOptions{ - session: cs.Session, // 会话 - dbDatabase: cs.Db.Database(name, opts...), // 数据库 + db: cs.db, // 驱动 + configDatabaseName: cs.configDatabaseName, // 库名 + session: cs.Session, // 会话 + dbDatabase: cs.db.Database(name, opts...), // 数据库 } } @@ -33,7 +37,7 @@ func (cs *MongoSessionOptions) Model(value interface{}) *MongoSessionCollectionO databaseName := methodValue.Call(nil)[0].String() sessionDatabaseOptions = cs.Database(databaseName) } else { - panic(NoConfigDatabaseName) + sessionDatabaseOptions = cs.Database(cs.configDatabaseName) } if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() {