- update mongo

master v1.0.40
李光春 2 years ago
parent 54ca833aa5
commit f1530064e9

@ -1,3 +1,3 @@
package dorm package dorm
const Version = "1.0.39" const Version = "1.0.40"

@ -17,38 +17,43 @@ type MongoClientFun func() (*MongoClient, string)
// string 集合 // string 集合
type MongoClientCollectionFun func() (*MongoClient, string, string) type MongoClientCollectionFun func() (*MongoClient, string, string)
type ConfigMongoClient struct { // MongoClientConfig 实例配置
type MongoClientConfig struct {
Dns string // 地址 Dns string // 地址
Opts *options.ClientOptions Opts *options.ClientOptions
DatabaseName string // 库名 DatabaseName string // 库名
} }
// MongoClient 实例
type MongoClient struct { type MongoClient struct {
Db *mongo.Client // 驱动 db *mongo.Client // 驱动
config *ConfigMongoClient // 配置 configDatabaseName string // 库名
} }
func NewMongoClient(config *ConfigMongoClient) (*MongoClient, error) { // NewMongoClient 创建实例
func NewMongoClient(config *MongoClientConfig) (*MongoClient, error) {
var ctx = context.Background() var ctx = context.Background()
var err error var err error
c := &MongoClient{config: config} c := &MongoClient{}
c.configDatabaseName = config.DatabaseName
// 连接到MongoDB // 连接到MongoDB
if c.config.Dns != "" { if config.Dns != "" {
c.Db, err = mongo.Connect(ctx, options.Client().ApplyURI(c.config.Dns)) c.db, err = mongo.Connect(ctx, options.Client().ApplyURI(config.Dns))
if err != nil { if err != nil {
return nil, errors.New(fmt.Sprintf("连接失败:%v", err)) return nil, errors.New(fmt.Sprintf("连接失败:%v", err))
} }
} else { } else {
c.Db, err = mongo.Connect(ctx, c.config.Opts) c.db, err = mongo.Connect(ctx, config.Opts)
if err != nil { if err != nil {
return nil, errors.New(fmt.Sprintf("连接失败:%v", err)) return nil, errors.New(fmt.Sprintf("连接失败:%v", err))
} }
} }
// 检查连接 // 检查连接
err = c.Db.Ping(ctx, nil) err = c.db.Ping(ctx, nil)
if err != nil { if err != nil {
return nil, errors.New(fmt.Sprintf("检查连接失败:%v", err)) return nil, errors.New(fmt.Sprintf("检查连接失败:%v", err))
} }
@ -58,5 +63,5 @@ func NewMongoClient(config *ConfigMongoClient) (*MongoClient, error) {
// Close 关闭 // Close 关闭
func (c *MongoClient) Close(ctx context.Context) error { func (c *MongoClient) Close(ctx context.Context) error {
return c.Db.Disconnect(ctx) return c.db.Disconnect(ctx)
} }

@ -8,13 +8,17 @@ import (
) )
type MongoCollectionOptions struct { type MongoCollectionOptions struct {
dbCollection *mongo.Collection // 集合 db *mongo.Client // 驱动
configDatabaseName string // 库名
dbCollection *mongo.Collection // 集合
} }
// Collection 选择集合 // Collection 选择集合
func (cd *MongoDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoCollectionOptions { func (cd *MongoDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoCollectionOptions {
return &MongoCollectionOptions{ return &MongoCollectionOptions{
dbCollection: cd.dbDatabase.Collection(name, opts...), db: cd.db, // 驱动
configDatabaseName: cd.configDatabaseName, // 库名
dbCollection: cd.dbDatabase.Collection(name, opts...), // 集合
} }
} }

@ -8,13 +8,17 @@ import (
) )
type MongoDatabaseOptions struct { type MongoDatabaseOptions struct {
dbDatabase *mongo.Database // 数据库 db *mongo.Client // 驱动
configDatabaseName string // 库名
dbDatabase *mongo.Database // 数据库
} }
// Database 选择数据库 // Database 选择数据库
func (c *MongoClient) Database(name string, opts ...*options.DatabaseOptions) *MongoDatabaseOptions { func (c *MongoClient) Database(name string, opts ...*options.DatabaseOptions) *MongoDatabaseOptions {
return &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() databaseName := methodValue.Call(nil)[0].String()
databaseOptions = c.Database(databaseName) databaseOptions = c.Database(databaseName)
} else { } else {
panic(NoConfigDatabaseName) databaseOptions = c.Database(c.configDatabaseName)
} }
if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() { if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() {

@ -4,5 +4,5 @@ import "go.mongodb.org/mongo-driver/mongo"
// GetDb 获取驱动 // GetDb 获取驱动
func (c *MongoClient) GetDb() *mongo.Client { func (c *MongoClient) GetDb() *mongo.Client {
return c.Db return c.db
} }

@ -8,9 +8,10 @@ import (
) )
type MongoSessionOptions struct { type MongoSessionOptions struct {
Session mongo.SessionContext // 会话 db *mongo.Client // 驱动
Db *mongo.Client // 驱动 configDatabaseName string // 库名
startSession mongo.Session // 开始会话 startSession mongo.Session // 开始会话
Session mongo.SessionContext // 会话
} }
// Begin 开始事务,会同时创建开始会话需要在退出时关闭会话 // Begin 开始事务,会同时创建开始会话需要在退出时关闭会话
@ -18,10 +19,11 @@ func (c *MongoClient) Begin() (ms *MongoSessionOptions, err error) {
var ctx = context.Background() 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 { if err != nil {
return nil, errors.New(fmt.Sprintf("开始会话失败:%v", err)) return nil, errors.New(fmt.Sprintf("开始会话失败:%v", err))
} }

@ -6,14 +6,18 @@ import (
) )
type MongoSessionCollectionOptions struct { type MongoSessionCollectionOptions struct {
session mongo.SessionContext // 会话 db *mongo.Client // 驱动
dbCollection *mongo.Collection // 集合 configDatabaseName string // 库名
session mongo.SessionContext // 会话
dbCollection *mongo.Collection // 集合
} }
// Collection 选择集合 // Collection 选择集合
func (csd *MongoSessionDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoSessionCollectionOptions { func (csd *MongoSessionDatabaseOptions) Collection(name string, opts ...*options.CollectionOptions) *MongoSessionCollectionOptions {
return &MongoSessionCollectionOptions{ return &MongoSessionCollectionOptions{
session: csd.session, // 会话 db: csd.db, // 驱动
dbCollection: csd.dbDatabase.Collection(name, opts...), // 集合 configDatabaseName: csd.configDatabaseName, // 库名
session: csd.session, // 会话
dbCollection: csd.dbDatabase.Collection(name, opts...), // 集合
} }
} }

@ -7,15 +7,19 @@ import (
) )
type MongoSessionDatabaseOptions struct { type MongoSessionDatabaseOptions struct {
session mongo.SessionContext // 会话 db *mongo.Client // 驱动
dbDatabase *mongo.Database // 数据库 configDatabaseName string // 库名
session mongo.SessionContext // 会话
dbDatabase *mongo.Database // 数据库
} }
// Database 选择数据库 // Database 选择数据库
func (cs *MongoSessionOptions) Database(name string, opts ...*options.DatabaseOptions) *MongoSessionDatabaseOptions { func (cs *MongoSessionOptions) Database(name string, opts ...*options.DatabaseOptions) *MongoSessionDatabaseOptions {
return &MongoSessionDatabaseOptions{ return &MongoSessionDatabaseOptions{
session: cs.Session, // 会话 db: cs.db, // 驱动
dbDatabase: cs.Db.Database(name, opts...), // 数据库 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() databaseName := methodValue.Call(nil)[0].String()
sessionDatabaseOptions = cs.Database(databaseName) sessionDatabaseOptions = cs.Database(databaseName)
} else { } else {
panic(NoConfigDatabaseName) sessionDatabaseOptions = cs.Database(cs.configDatabaseName)
} }
if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() { if methodValue := val.MethodByName("CollectionName"); methodValue.IsValid() {

Loading…
Cancel
Save