Pokud používáte knihovnu PHP, která obaluje ovladač, po vytvoření instance Client
např. s názvem $client
, můžete provést následující:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Bohužel jsem nemohl najít žádnou relevantní dokumentaci v referenčních knihách PHP po zběžném hledání jsem ale našel příklady v problémy knihovny PHP které naznačují, že vytvoření relace z klienta a použití této relace ke spuštění a následnému potvrzení nebo zrušení transakce je vhodný postup.
Je však třeba si uvědomit několik věcí:
-
Proměnnou $session je třeba předat v samostatném parametru . Tj. pokud chcete spustit
insertOne(['abc' => 1])
v relaci budete potřebovatinsertOne(['abc' => 1], ['session' => $session])
. Pokud to neuděláte, operace budou stále provedeny, ale nebudou součástí relace – tj. pokud později relaci vrátíte zpět, nebudou vráceny zpět. -
Transakce jsou pouze dostupné, pokud jste nakonfigurovali sadu replik . V této fázi MongoDB nepodporuje transakce na samostatném serveru.
Pokud si prohlédnete dokumenty MongoDB (jak je uvedeno výše), všimnete si, že požadavek na používání sady replik není nijak zvlášť nápadně zobrazen, nachází se pod třetím nadpisem a přichází po celém vzorovém kódu (který, pokud jste něco jako já, bude to první, co hledáte).