Ако използвате PHP библиотеката, която обвива драйвера, след създаване на екземпляр на Client
напр. наречен $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 (както е свързано по-горе), ще забележите, че изискването за набор от реплики да се използва не е особено видно, намирайки се под третото заглавие и идва след целия примерен код (който, ако сте нещо като мен, ще бъде първото нещо, което търсите).