为了账号安全,请及时绑定邮箱和手机立即绑定

使用 GoLang 在 mongodb 中进行事务的示例

使用 GoLang 在 mongodb 中进行事务的示例

Go
杨魅力 2023-06-01 18:22:10
我需要一个示例来使用 GoLang 在 MongoDB 中实现事务。我正在为 mongodb 使用这个 golang 驱动程序没有关于如何实现事务的明确文档。谁能帮我?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

这可能会令人困惑。下面是一个简单的例子。


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.CommitTransaction(sc); err != nil {

        t.Fatal(err)

    }

    return nil

}); err != nil {

    t.Fatal(err)

}

session.EndSession(ctx)

查看完整回答
反对 回复 2023-06-01
?
偶然的你

TA贡献1841条经验 获得超3个赞

这会帮助你


ctx := context.Background()

client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))

if err != nil {

    panic(err)

}


db := client.Database("testdb")

defer db.Client().Disconnect(ctx)

col := db.Collection("testcol")


// transaction

err = db.Client().UseSession(ctx, func(sessionContext mongo.SessionContext) error {

    err := sessionContext.StartTransaction()

    if err != nil {

        return err

    }


    _, err = col.InsertOne(sessionContext, bson.M{"_id": "1", "name": "berry"})

    if err != nil {

        return err

    }


    _, err = col.InsertOne(sessionContext, bson.M{"_id": "2", "name": "gucci"})

    if err != nil {

        sessionContext.AbortTransaction(sessionContext)

        return err

    }

    if err = session.CommitTransaction(sessionContext); err != nil {

        return err

    }

    return nil

})


查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 328 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信