Я новичок в MongoDB
, так как раньше я был суперфаном MySQL
. Я недавно перешел на эту NoSQL
вещь и мне это нравилось, но теперь я попал в ловушку на Транзакциях в MongoDB
.
Я нашел несколько связанных вопросов по SO, но без ответов или устарел который не работает с новым MongoDB PHP Driver
, так как в синтаксисе / функциях есть много изменений, и я мог видеть, что многие newb ie, подобные мне, путаются между MongoDB Docs и PHP Driver.
Я нашел этот путь совершения транзакций в MongoDB Docs
$client = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");
$callback = function (\MongoDB\Driver\Session $session) use ($client)
{
$client->selectCollection('mydb1', 'foo')->insertOne(['abc' => 1], ['session' => $session]);
$client->selectCollection('mydb2', 'bar')->insertOne(['xyz' => 999], ['session' => $session]);
};
// Step 2: Start a client session.
$session = $client->startSession();
// Step 3: Use with_transaction to start a transaction, execute the callback, and commit
$transactionOptions =
[
'readConcern' => new \MongoDB\Driver\ReadConcern(\MongoDB\Driver\ReadConcern::LOCAL),
'writeConcern' => new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, 1000),
'readPreference' => new \MongoDB\Driver\ReadPreference(\MongoDB\Driver\ReadPreference::RP_PRIMARY),
];
\MongoDB\with_transaction($session, $callback, $transactionOptions);
, но этот синтаксис / функции устарел для нового PHP драйвера и выдает следующую ошибку
Call to undefined function MongoDB\with_transaction()
Согласно PHP Docs, Новый PHP Драйвер для MongoDB предоставляет эти опции для фиксации транзакции, но я не понимаю, как? потому что в документах нет примеров.
https://www.php.net/manual/en/mongodb-driver-manager.startsession.php
https://www.php.net/manual/en/mongodb-driver-session.starttransaction.php
https://www.php.net/manual/en/mongodb-driver-session.committransaction.php
Мой вопрос: как я могу обновить вышеуказанный код с помощью новых PHP функций драйвера? Я считаю, что нужно использовать
MongoDB\Driver\Manager::startSession
MongoDB\Driver\Session::startTransaction
MongoDB\Driver\Session::commitTransaction
, но я не понимаю, каков их синтаксис или их аргументы и т. Д. c из-за неполной документации и отсутствия примеров. Благодарю вас в ожидании вашего времени и поддержки.