Jeśli używasz biblioteki PHP, która otacza sterownik, po utworzeniu instancji Client
np. o nazwie $client
, możesz wykonać następujące czynności:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Niestety nie mogłem znaleźć żadnej odpowiedniej dokumentacji w odniesienia do biblioteki PHP po pobieżnym wyszukiwaniu, ale znalazłem przykłady w problemy z biblioteką PHP sugerujące, że utworzenie sesji od klienta i użycie tej sesji do rozpoczęcia, a następnie zatwierdzenia lub przerwania transakcji jest odpowiednią procedurą.
Należy jednak pamiętać o kilku rzeczach:
-
Zmienna $session musi być przekazana w osobnym parametrze . Tj. jeśli chcesz wykonać
insertOne(['abc' => 1])
w sesji będziesz potrzebowaćinsertOne(['abc' => 1], ['session' => $session])
. Jeśli tego nie zrobisz, operacje będą nadal wykonywane, ale nie będą częścią sesji - tzn. jeśli później cofniesz sesję, nie zostaną cofnięte. -
Transakcje są tylko dostępne, jeśli skonfigurowałeś zestaw replik . Na tym etapie MongoDB nie obsługuje transakcji na samodzielnym serwerze.
Jeśli przeglądasz dokumenty MongoDB (jak link powyżej), zauważysz, że wymóg użycia zestawu replik nie jest szczególnie widoczny, znajduje się pod trzecim nagłówkiem i znajduje się po całym przykładowym kodzie (który, jeśli jesteś podobny do mnie, będzie pierwszą rzeczą, której szukasz).