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

标签 mongodb go

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

相关文章:

go - 执行 .go 文件时出错。即使安装了 go 也无法识别

MongoDB:如何获取集合中最后更新文档的最后更新时间戳

ruby-on-rails - rails 3 : Migrating a model to MongoDB

go - 在 go 中从 Cassandra 创建 json

go - 如何在Golang中实现二叉树的中序遍历

go - 生成后的模板标识

Javascript 和 mongodb,如何将条件数组传递给查询

mongodb - 系统间缓存和 MongoDB 比较

javascript - 如何在 KeyStone.js 中显式创建新用户

rest - 在使用 Auth0 的 golang 服务器中找出当前用户名