,我正在使用golang驱动程序
go.mongodb.org/mongo-driver/mongo
学习mongodb事务。我正在 github 上关注这个 so 答案和这个示例。,@simagix 给出的示例代码:,在这两个示例中,如果出现错误,它们都不会回滚。我知道这是一个演示样本。但是当我在代码中执行相同操作时,它工作得很好。,在发生错误时是否可以省略回滚(驱动程序是否处理它)?或者我错过了什么?,mongo.withsession()
确实不假设任何活动事务,它“仅”有助于在给定会话下运行回调。因此,如果您希望它作为启动事务的一部分执行,您应该自己处理提交和中止。这样可以进行更精细的控制。,但是,如果您打算将回调作为事务运行,则使用 session.withtransaction()
因为它以透明的方式处理事务及其生命周期:它创建事务并根据回调返回的错误提交或中止它。作为额外的功能,它还可以处理重试。正如其文档还指出的那样:,如果回调失败,驱动程序将调用aborttransaction。,这是一个如何在事务中正确执行回调的简单示例:,