我正在将Go后端从使用mgo
迁移到mongo-go
.该服务有很多代码,我已经完成了大部分,除了处理旧mgo
中的session.Copy()
方法的部分.相关片段如下:
import (
"gopkg.in/mgo.v2"
)
...
type Store struct {
session *mgo.Session
}
func (s *Store) collection(collectionName string) (*mgo.Session, *mgo.Collection) {
session := s.session.Copy()
collection := session.DB("").C(collectionName)
return session, collection
}
我想在尊重整体设计的同时重写这篇文章,但我不确定如何处理第session := s.session.Copy()
行-我想做一些类似的事情:
import(
"go.mongodb.org/mongo-driver/mongo"
)
type Store struct {
client *mongo.Client
}
func (s *Store) collection(collectionName string) (*mongo.Client, *mongo.Collection) {
client, err := s.client."what method to call here"
if err != nil {
//error will be handled here
}
collection := session.Database(DBName).Collection(collectionName)
return session, collection
}
我的理解是,session.Copy()
方法尊重已就位的原始连接,但仅在此基础上启动一个新的会话,如这里https://pkg.go.dev/gopkg.in/mgo.v2#Session.Copy中所解释的.
有几种我似乎可以使用的方法,m.client.StartSession(opts ...*options.SessionOptions)
看起来是自然的候选者.但它的文档让我感到困惑,因为连接已经在main.go
中通过类似以下内容建立:
clientOptions := options.Client().ApplyURI("URI")
// Connect to MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}