Jika Anda menggunakan library PHP yang membungkus driver, setelah membuat instance Client
misalnya disebut $client
, Anda dapat melakukan hal berikut:
$session = $client->startSession();
$session->startTransaction();
try {
// Perform actions.
$session->commitTransaction();
} catch(Exception $e) {
$session->abortTransaction();
}
Sayangnya saya tidak dapat menemukan dokumentasi yang relevan di referensi pustaka PHP setelah pencarian sepintas, tetapi saya menemukan contoh di masalah perpustakaan PHP yang menyarankan bahwa membuat sesi dari klien dan menggunakan sesi itu untuk memulai kemudian melakukan atau membatalkan transaksi adalah prosedur yang sesuai.
Namun, beberapa hal yang perlu diperhatikan:
-
Variabel $session harus diteruskan dalam parameter terpisah . Yaitu. jika Anda ingin menjalankan
insertOne(['abc' => 1])
dalam satu sesi, Anda memerlukaninsertOne(['abc' => 1], ['session' => $session])
. Jika Anda tidak melakukan ini, operasi akan tetap dijalankan, tetapi tidak akan menjadi bagian dari sesi - yaitu jika Anda mengembalikan sesi nanti, sesi tidak akan dibatalkan. -
Transaksi hanya tersedia jika Anda telah mengonfigurasi kumpulan replika . Pada tahap ini MongoDB tidak mendukung transaksi di server mandiri.
Jika Anda melihat dokumen MongoDB (seperti yang ditautkan di atas), Anda akan melihat bahwa persyaratan untuk kumpulan replika yang akan digunakan tidak ditampilkan secara mencolok, berada di bawah judul ketiga, dan muncul setelah semua kode contoh (yang, jika Anda seperti saya, akan menjadi hal pertama yang Anda cari).