From dbcb8804652bda81526ccd177c041da9330cf3aa 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 11:17:12 +0800 Subject: [PATCH] - update mongo --- const.go | 2 +- mongo_session.go | 21 ++++++++++----------- mongo_session_collection.go | 4 +++- mongo_session_collection_curd.go | 16 ++++++++-------- mongo_session_database.go | 6 ++++-- mongo_session_get.go | 16 ++++++++++++++++ 6 files changed, 42 insertions(+), 23 deletions(-) create mode 100644 mongo_session_get.go diff --git a/const.go b/const.go index 98b051d..7754fa0 100644 --- a/const.go +++ b/const.go @@ -1,3 +1,3 @@ package dorm -const Version = "1.0.41" +const Version = "1.0.42" diff --git a/mongo_session.go b/mongo_session.go index 5b1d406..c4dc726 100644 --- a/mongo_session.go +++ b/mongo_session.go @@ -10,43 +10,42 @@ import ( type MongoSessionOptions struct { db *mongo.Client // 驱动 configDatabaseName string // 库名 - startSession mongo.Session // 开始会话 - Session mongo.SessionContext // 会话 + session mongo.Session // 会话 + sessionContext mongo.SessionContext // 会话上下文 } // Begin 开始事务,会同时创建开始会话需要在退出时关闭会话 -func (c *MongoClient) Begin() (ms *MongoSessionOptions, err error) { - - var ctx = context.Background() +func (c *MongoClient) Begin(ctx context.Context) (ms *MongoSessionOptions, err error) { ms.db = c.db ms.configDatabaseName = c.configDatabaseName // 开始会话 - ms.startSession, err = ms.db.StartSession() + ms.session, err = ms.db.StartSession() if err != nil { return nil, errors.New(fmt.Sprintf("开始会话失败:%v", err)) } // 会话上下文 - ms.Session = mongo.NewSessionContext(ctx, ms.startSession) + ms.sessionContext = mongo.NewSessionContext(ctx, ms.session) // 会话开启事务 - err = ms.startSession.StartTransaction() + err = ms.session.StartTransaction() + return ms, err } // Close 关闭会话 func (cs *MongoSessionOptions) Close(ctx context.Context) { - cs.startSession.EndSession(ctx) + cs.session.EndSession(ctx) } // Rollback 回滚事务 func (cs *MongoSessionOptions) Rollback(ctx context.Context) error { - return cs.startSession.AbortTransaction(ctx) + return cs.session.AbortTransaction(ctx) } // Commit 提交事务 func (cs *MongoSessionOptions) Commit(ctx context.Context) error { - return cs.startSession.CommitTransaction(ctx) + return cs.session.CommitTransaction(ctx) } diff --git a/mongo_session_collection.go b/mongo_session_collection.go index f2b17de..c2c0cf4 100644 --- a/mongo_session_collection.go +++ b/mongo_session_collection.go @@ -8,7 +8,8 @@ import ( type MongoSessionCollectionOptions struct { db *mongo.Client // 驱动 configDatabaseName string // 库名 - session mongo.SessionContext // 会话 + session mongo.Session // 会话 + sessionContext mongo.SessionContext // 会话上下文 dbCollection *mongo.Collection // 集合 } @@ -18,6 +19,7 @@ func (csd *MongoSessionDatabaseOptions) Collection(name string, opts ...*options db: csd.db, // 驱动 configDatabaseName: csd.configDatabaseName, // 库名 session: csd.session, // 会话 + sessionContext: csd.sessionContext, // 会话上下文 dbCollection: csd.dbDatabase.Collection(name, opts...), // 集合 } } diff --git a/mongo_session_collection_curd.go b/mongo_session_collection_curd.go index 7bca5a7..d9fb224 100644 --- a/mongo_session_collection_curd.go +++ b/mongo_session_collection_curd.go @@ -7,40 +7,40 @@ import ( // InsertOne 插入一个文档 func (csc *MongoSessionCollectionOptions) InsertOne(document interface{}, opts ...*options.InsertOneOptions) (*mongo.InsertOneResult, error) { - return csc.dbCollection.InsertOne(csc.session, document, opts...) + return csc.dbCollection.InsertOne(csc.sessionContext, document, opts...) } // InsertMany 插入多个文档 func (csc *MongoSessionCollectionOptions) InsertMany(document []interface{}, opts ...*options.InsertManyOptions) (*mongo.InsertManyResult, error) { - return csc.dbCollection.InsertMany(csc.session, document, opts...) + return csc.dbCollection.InsertMany(csc.sessionContext, document, opts...) } // DeleteOne 删除一个文档 func (csc *MongoSessionCollectionOptions) DeleteOne(filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error) { - return csc.dbCollection.DeleteOne(csc.session, filter, opts...) + return csc.dbCollection.DeleteOne(csc.sessionContext, filter, opts...) } // DeleteMany 删除多个文档 func (csc *MongoSessionCollectionOptions) DeleteMany(filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error) { - return csc.dbCollection.DeleteMany(csc.session, filter, opts...) + return csc.dbCollection.DeleteMany(csc.sessionContext, filter, opts...) } // UpdateOne 更新一个文档 func (csc *MongoSessionCollectionOptions) UpdateOne(filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error) { - return csc.dbCollection.UpdateOne(csc.session, filter, update, opts...) + return csc.dbCollection.UpdateOne(csc.sessionContext, filter, update, opts...) } // UpdateMany 更新多个文档 func (csc *MongoSessionCollectionOptions) UpdateMany(filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error) { - return csc.dbCollection.UpdateMany(csc.session, filter, update, opts...) + return csc.dbCollection.UpdateMany(csc.sessionContext, filter, update, opts...) } // FindOne 查询一个文档 func (csc *MongoSessionCollectionOptions) FindOne(filter interface{}, opts ...*options.FindOneOptions) *mongo.SingleResult { - return csc.dbCollection.FindOne(csc.session, filter, opts...) + return csc.dbCollection.FindOne(csc.sessionContext, filter, opts...) } // Find 查询多个文档 func (csc *MongoSessionCollectionOptions) Find(filter interface{}, opts ...*options.FindOptions) (*mongo.Cursor, error) { - return csc.dbCollection.Find(csc.session, filter, opts...) + return csc.dbCollection.Find(csc.sessionContext, filter, opts...) } diff --git a/mongo_session_database.go b/mongo_session_database.go index ff26f96..26d5d77 100644 --- a/mongo_session_database.go +++ b/mongo_session_database.go @@ -9,7 +9,8 @@ import ( type MongoSessionDatabaseOptions struct { db *mongo.Client // 驱动 configDatabaseName string // 库名 - session mongo.SessionContext // 会话 + session mongo.Session // 会话 + sessionContext mongo.SessionContext // 会话上下文 dbDatabase *mongo.Database // 数据库 } @@ -18,7 +19,8 @@ func (cs *MongoSessionOptions) Database(name string, opts ...*options.DatabaseOp return &MongoSessionDatabaseOptions{ db: cs.db, // 驱动 configDatabaseName: cs.configDatabaseName, // 库名 - session: cs.Session, // 会话 + session: cs.session, // 会话 + sessionContext: cs.sessionContext, // 会话上下文 dbDatabase: cs.db.Database(name, opts...), // 数据库 } } diff --git a/mongo_session_get.go b/mongo_session_get.go new file mode 100644 index 0000000..1d73b04 --- /dev/null +++ b/mongo_session_get.go @@ -0,0 +1,16 @@ +package dorm + +import ( + "context" + "go.mongodb.org/mongo-driver/mongo" +) + +// GetSession 获取会话 +func (cs *MongoSessionOptions) GetSession(ctx context.Context) mongo.Session { + return cs.session +} + +// GetSessionContext 获取会话上下文 +func (cs *MongoSessionOptions) GetSessionContext(ctx context.Context) mongo.SessionContext { + return cs.sessionContext +}