gpt4 book ai didi

mongodb - 使用 session 的官方 mongo-go-driver

转载 作者:IT王子 更新时间:2023-10-29 02:31:00 25 4
gpt4 key购买 nike

有没有使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com