Om du använder PHP-biblioteket som omsluter drivrutinen, efter att du skapat en instans av Client
t.ex. kallas $client
kan du göra följande:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Tyvärr kunde jag inte hitta någon relevant dokumentation i PHP-biblioteksreferensen efter en översiktlig sökning, men jag hittade exempel i PHP-bibliotekets problem som tyder på att att skapa en session från klienten och använda den sessionen för att starta och sedan antingen utföra eller avbryta transaktionen är lämplig procedur.
Ett par saker att vara medveten om, dock:
-
$session-variabeln måste skickas in i en separat parameter . d.v.s. om du vill köra
insertOne(['abc' => 1])
i en session behöver duinsertOne(['abc' => 1], ['session' => $session])
. Om du inte gör detta kommer operationerna fortfarande att utföras, men de kommer inte att vara en del av sessionen - det vill säga om du senare rullar tillbaka sessionen kommer de inte att ångras. -
Transaktioner är endast tillgängligt om du har konfigurerat en replikuppsättning . I detta skede stöder MongoDB inte transaktioner på en fristående server.
Om du tittar på MongoDB-dokumenten (som länkat ovan) kommer du att notera att kravet på att en replikuppsättning ska vara i bruk inte visas särskilt tydligt, eftersom det ligger under den tredje rubriken och kommer efter all exempelkoden (som, om du är något som jag är det första du letar efter).