有没有使用 golang 的官方 mongodb 驱动程序 session 的例子?我正在尝试使用 session 来利用事务,似乎只是在 github 上阅读测试我找不到方法。
更具体地说,我现在正为此苦苦挣扎:
session, err := pool.StartSession()
if err != nil {
log.Println("Could not create db session", err)
return events.APIGatewayProxyResponse{
Body: err.Error(),
StatusCode: http.StatusInternalServerError,
}, err
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
defer session.EndSession(ctx)
var db *mongo.Database
上面的代码一切正常,但是当我这样做时:
db = session.Database("testrest")
它给出了错误:
session.Database undefined (type mongo.Session has no field or method Database)
这似乎适用于 mgo 包……如何选择数据库并使用 session 运行查询?
最佳答案
可以在这里找到解决方案:https://github.com/simagix/mongo-go-examples/blob/master/examples/transaction_test.go#L68
if session, err = client.StartSession(); err != nil {
t.Fatal(err)
}
if err = session.StartTransaction(); err != nil {
t.Fatal(err)
}
if err = mongo.WithSession(ctx, session, func(sc mongo.SessionContext) error {
if result, err = collection.UpdateOne(sc, bson.M{"_id": id}, update); err != nil {
t.Fatal(err)
}
if result.MatchedCount != 1 || result.ModifiedCount != 1 {
t.Fatal("replace failed, expected 1 but got", result.MatchedCount)
}
if err = session.AbortTransaction(sc); err != nil {
t.Fatal(err)
}
return nil
}); err != nil {
t.Fatal(err)
}
session.EndSession(ctx)
关于mongodb - 使用 session 的官方 mongo-go-driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54627542/