Hvis du bruger PHP-biblioteket, der omslutter driveren, efter at du har oprettet en forekomst af Client
for eksempel. kaldet $client
, kan du gøre følgende:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Desværre kunne jeg ikke finde nogen relevant dokumentation i PHP-biblioteksreferencen efter en overfladisk søgning, men jeg fandt eksempler i PHP-bibliotekets problemer som tyder på, at oprettelse af en session fra klienten og brug af denne session til at starte og derefter enten begå eller afbryde transaktionen er den passende procedure.
Et par ting at være opmærksom på, dog:
-
$session-variablen skal sendes ind i en separat parameter . dvs. hvis du vil udføre
insertOne(['abc' => 1])
i en session skal du brugeinsertOne(['abc' => 1], ['session' => $session])
. Hvis du ikke gør dette, vil handlingerne stadig blive udført, men de vil ikke være en del af sessionen - dvs. hvis du senere ruller sessionen tilbage, vil de ikke blive fortrudt. -
Transaktioner er kun tilgængelig, hvis du har konfigureret et replikasæt . På dette stadium understøtter MongoDB ikke transaktioner på en selvstændig server.
Hvis du ser MongoDB-dokumenterne (som linket ovenfor), vil du bemærke, at kravet om, at et replikasæt skal være i brug, ikke vises særlig fremtrædende, idet det er under den tredje overskrift og kommer efter al eksempelkoden (som, hvis du er noget som mig, vil det være den første ting du leder efter).