mongo php事务
mongodb开启事务支持
参考:https://blog.csdn.net/liuty66/article/details/126610914
问题定位
经过查阅,发现当MongoDB为单例运行时是无法完成回滚操作的,只有在开启副本集的时候才能使用。
解决方案
Mongodb配置文件
replication:
oplogSizeMB: 2000
replSetName: rs0
enableMajorityReadConcern: true
Mongodb集群初始化
连接进入mongo,使用rs.initiate()初始化副本集。
public function mongodbtest(){ //连接 mongodb $manager = new \MongoDB\Driver\Manager('mongodb://172.16.100.191:27017'); //开启session //causalConsistency boolean 因果一致性 如果操作依赖先前的操作需要设置为true $session = $manager->startSession(['causalConsistency' => true]); //开启事务 $session->startTransaction(); //下面执行两个写操作 //批量插入/删除/更新操作 //ordered 有序操作(TRUE)在MongoDB服务器上串行执行,而无序操作(FALSE)以任意顺序发送到服务器,并且可以并行执行。 $bulk1 = new \MongoDB\Driver\BulkWrite(['ordered' => true]); $bulk1->insert(['name' => 'insert', 'age' => 44]); $writeConcern1 = new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, 1000); //执行批量插入/删除/更新操作 //第一个参数 databaseName.collectionName //第二个参数 要执行的操作 $manager->executeBulkWrite('huaxiang.user', $bulk1, ['session' => $session, 'writeConcern' => $writeConcern1]); $bulk2 = new \MongoDB\Driver\BulkWrite(['ordered' => true]); $bulk2->insert(['id' => 2]); $writeConcern2 = new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, 1000); $manager->executeBulkWrite('huaxiang.coin', $bulk2, ['session' => $session, 'writeConcern' => $writeConcern2]); //提交事务 //$session->commitTransaction(); //事务回滚 $session->abortTransaction(); }