使用PHP的MongoDB 4.0中的事务示例

时间:2018-11-29 18:40:12

标签: php mongodb transactions

我需要在PHP中使用mongoDB展示一个事务。在我的示例中,我有“帐户”和“转帐”。我的第一个操作是从“发件人帐户”中扣除余额,然后尝试将资金转入“受益人帐户”,但后者不能接受任何转帐,因此,交易应回滚,即应将钱退还给发件人帐户。

我找不到任何有关在线交易的PHP具体文档,因此我真的不知道该怎么做。

谢谢您的帮助!

2 个答案:

答案 0 :(得分:2)

根据mongodb文档,可接受的答案遗漏了一个关键部分-您需要将会话作为参数传递给应该作为事务一部分的任何操作。否则,它们将像正常操作一样运行(即,如果事务中止,则不会回滚)-这不像传统的RDBMS事务那样只是开始事务,默认情况下,之后的所有内容都是事务的一部分,直到COMMIT(或ROLLBACK)为止

话虽这么说,事务在mongo中仍然是相当新的,而且我还无法获得甚至在mongo 4.0.12下使用PHP MongoDB驱动程序1.5.5的示例PHP代码。 ,所以它可能仍处于最前沿(或者也许只是不使用mongo和driver的组合)。

更新:为了与mongodb一起使用事务,您似乎需要一个副本集而不是一个独立服务器。

更新:接受的答案已直接编辑以包含此信息

答案 1 :(得分:0)

如果您使用的是包装驱动程序的PHP库,请在创建Client实例后,例如名为$client,您可以执行以下操作:

$session = $client->startSession();
$session->startTransaction();
try {
    // Perform actions.
    $session->commitTransaction();
} catch(Exception $e) {
    $session->abortTransaction();
}

不幸的是,经过粗略的搜索后,我在PHP library reference中找不到任何相关文档,但是我在PHP library's issues中找到了一些示例,这些示例建议从客户端创建会话并使用该会话开始那么提交或中止事务就是适当的过程。