Si está utilizando la biblioteca PHP que envuelve el controlador, después de crear una instancia de Client
p.ej. llamado $client
, puede hacer lo siguiente:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Lamentablemente, no pude encontrar ninguna documentación relevante en la referencia de la biblioteca PHP después de una búsqueda superficial, pero encontré ejemplos en problemas de la biblioteca PHP que sugieren que crear una sesión desde el cliente y usar esa sesión para iniciar y luego confirmar o cancelar la transacción es el procedimiento apropiado.
Sin embargo, un par de cosas a tener en cuenta:
-
La variable $session debe pasarse en un parámetro separado . Es decir. si desea ejecutar
insertOne(['abc' => 1])
en una sesión, necesitaráinsertOne(['abc' => 1], ['session' => $session])
. Si no hace esto, las operaciones seguirán ejecutándose, pero no formarán parte de la sesión, es decir, si luego revierte la sesión, no se desharán. -
Las transacciones son solo disponible si ha configurado un conjunto de réplicas . En esta etapa, MongoDB no admite transacciones en un servidor independiente.
Si ve los documentos de MongoDB (como se vincula anteriormente), notará que el requisito para que un conjunto de réplicas esté en uso no se muestra de manera particularmente prominente, está debajo del tercer encabezado y viene después de todo el código de ejemplo (que, si eres como yo, será lo primero que busques).