Se você estiver usando a biblioteca PHP que envolve o driver, depois de criar uma instância de
Client
por exemplo. chamado $client
, você pode fazer o seguinte:$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Infelizmente, não consegui encontrar nenhuma documentação relevante na referência da biblioteca PHP após uma pesquisa superficial, mas encontrei exemplos nos problemas da biblioteca PHP que sugerem que criar uma sessão a partir do cliente e usar essa sessão para iniciar e, em seguida, confirmar ou abortar a transação é o procedimento apropriado.
Algumas coisas para estar ciente, no entanto:
-
A variável $session precisa ser passada em um parâmetro separado . Ou seja se você quiser executarinsertOne(['abc' => 1])
em uma sessão, você precisará deinsertOne(['abc' => 1], ['session' => $session])
. Se você não fizer isso, as operações ainda serão executadas, mas não farão parte da sessão - ou seja, se você reverter a sessão posteriormente, elas não serão desfeitas.
-
As transações são somente disponível se você configurou um conjunto de réplicas . Neste estágio, o MongoDB não suporta transações em um servidor autônomo.
Se você visualizar os documentos do MongoDB (conforme link acima), notará que o requisito para um conjunto de réplicas em uso não é exibido de forma particularmente proeminente, estando sob o terceiro título e vindo após todo o código de exemplo (que, se você for como eu, será a primeira coisa que você procura).