Wenn Sie die PHP-Bibliothek verwenden, die den Treiber umschließt, nachdem Sie eine Instanz von Client
erstellt haben z.B. namens $client
, können Sie Folgendes tun:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Leider konnte ich in der PHP-Bibliotheksreferenz keine relevante Dokumentation finden nach einer flüchtigen Suche fand ich Beispiele in den Problemen der PHP-Bibliothek die darauf hindeuten, dass das Erstellen einer Sitzung vom Client und das Verwenden dieser Sitzung zum Starten und anschließenden Festschreiben oder Abbrechen der Transaktion das geeignete Verfahren ist.
Ein paar Dinge sollten Sie jedoch beachten:
-
Die $session-Variable muss in einem separaten Parameter übergeben werden . D.h. wenn Sie
insertOne(['abc' => 1])
ausführen möchten in einer Sitzung benötigen SieinsertOne(['abc' => 1], ['session' => $session])
. Wenn Sie dies nicht tun, werden die Operationen trotzdem ausgeführt, sind aber nicht Teil der Sitzung – d. h. wenn Sie später die Sitzung zurücksetzen, werden sie nicht rückgängig gemacht. -
Transaktionen sind nur verfügbar, wenn Sie einen Replikatsatz konfiguriert haben . Derzeit unterstützt MongoDB keine Transaktionen auf einem eigenständigen Server.
Wenn Sie sich die MongoDB-Dokumente (wie oben verlinkt) ansehen, werden Sie feststellen, dass die Anforderung, dass ein Replikatsatz verwendet werden muss, nicht besonders deutlich angezeigt wird, da sie unter der dritten Überschrift steht und nach dem ganzen Beispielcode kommt (was, wenn Sie so etwas wie ich sind, wird das erste sein, wonach Sie suchen).