首页 > 解决方案 > php mongodb 库 abortTransaction 不起作用

问题描述

我正在尝试使用 php-mongodb 库 v1.5 学习 mongodb 事务,但我发现了一些问题。

我尝试使用给定方法启动、提交和中止事务,但 abortTransaction 对我不起作用:

    $session = self::$instance->startSession();

    $this->db = self::$instance->{"mydb"};

    $session->startTransaction();

    $this->db->users->deleteOne([

        '_id' => new MongoDB\BSON\ObjectId('5c88e197df815495df201a38')
    ]);

    $session->abortTransaction();

    $session->endSession();

即使在中止操作之后也始终提交事务!

我在这里缺少什么,请保存我的一天:(

标签: phpmongodbtransactions

解决方案


即使在中止操作之后,事务也始终提交

这是因为删除操作没有使用session您已实例化的对象。您需要将MongoDB\Collection::deleteOne()session作为$options参数传递。否则它将在事务之外执行。例如:

$session->startTransaction();
$this->db->users->deleteOne(
   ['_id' => new MongoDB\BSON\ObjectId('5c88e197df815495df201a38')], 
   ['session' => $session]
);

另请参阅MongoDB 事务以获取更多信息


推荐阅读