是否有使用gogo官方mongodb驱动程序进行会话的示例?我正在尝试使用会话来利用事务,似乎只是在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未定义(类型mongo.Session没有字段或方法 数据库)
哪个似乎可以与mgo软件包一起使用...我如何选择数据库并通过会话运行查询?
答案 0 :(得分:3)
找到我的问题的解决方案: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)