Si vous utilisez la bibliothèque PHP qui encapsule le pilote, après avoir créé une instance de Client
par exemple. appelé $client
, vous pouvez effectuer les opérations suivantes :
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Malheureusement, je n'ai trouvé aucune documentation pertinente dans la référence de la bibliothèque PHP après une recherche rapide, mais j'ai trouvé des exemples dans les problèmes de la bibliothèque PHP qui suggèrent que la création d'une session à partir du client et l'utilisation de cette session pour démarrer puis valider ou abandonner la transaction est la procédure appropriée.
Quelques choses à savoir cependant :
-
La variable $session doit être transmise dans un paramètre séparé . C'est à dire. si vous voulez exécuter
insertOne(['abc' => 1])
dans une session, vous aurez besoin deinsertOne(['abc' => 1], ['session' => $session])
. Si vous ne le faites pas, les opérations seront toujours exécutées, mais ne feront pas partie de la session - c'est-à-dire que si vous annulez ultérieurement la session, elles ne seront pas annulées. -
Les transactions sont seulement disponible si vous avez configuré un jeu de répliques . À ce stade, MongoDB ne prend pas en charge les transactions sur un serveur autonome.
Si vous consultez la documentation MongoDB (comme indiqué ci-dessus), vous remarquerez que l'exigence d'utilisation d'un jeu de réplicas n'est pas particulièrement visible, étant sous le troisième titre et venant après tout l'exemple de code (qui, si vous êtes comme moi, ce sera la première chose que vous chercherez).