Client
のインスタンスを作成した後、ドライバーをラップするPHPライブラリを使用している場合 例えば$client
と呼ばれます 、次のことができます:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
残念ながら、PHPライブラリリファレンス に関連するドキュメントが見つかりませんでした。 ざっと検索したところ、PHPライブラリの問題> これは、クライアントからセッションを作成し、そのセッションを使用して開始し、トランザクションをコミットまたは中止することが適切な手順であることを示唆しています。
ただし、注意すべき点がいくつかあります。
-
$session変数は別のパラメーターで渡す必要があります 。つまり
insertOne(['abc' => 1])
を実行する場合 セッションでは、insertOne(['abc' => 1], ['session' => $session])
が必要です。 。これを行わない場合、操作は引き続き実行されますが、セッションの一部にはなりません。つまり、後でセッションをロールバックした場合、操作は元に戻されません。 -
トランザクションはのみです レプリカセットを構成している場合に利用可能 。この段階では、MongoDBはスタンドアロンサーバーでのトランザクションをサポートしていません。
(上記のリンク先の)MongoDBドキュメントを表示すると、レプリカセットの要件が特に目立つように表示されておらず、3番目の見出しの下にあり、すべてのサンプルコードの後にあることに気付くでしょう(これは、あなたが私のようなものなら、あなたが最初に探すものになります。