Я хочу запустить массовую операцию в пн go, но в то же время запустить ее в многодокументной транзакции. Я использую Meteor под управлением NodeJs драйвера MongoDb.
В соответствии с документацией MongoDB (https://docs.mongodb.com/manual/reference/method/Bulk/) должно быть возможно объединить Bulk
и multi-document transactions
. Тем не менее, я не смог решить эту проблему.
Моя проблема в том, как передать объект session
в групповые операции. Для не массовых операций мы просто передаем его как объект параметров const options = {session: session}
. Я пытался передать его несколькими способами, но, похоже, ничего не работает.
Как использовать объект session
в операциях Bulk
?
Ниже приведен простой пример того, что я Я пытаюсь достичь.
const getMongoClient = function() {
const { client } = MongoInternals.defaultRemoteCollectionDriver().mongo;
return client;
}
const session = client.startSession();
try {
session.startTransaction();
const bulk = someCollectionToBulkWrite.rawCollection().initializeOrderedBulkOp(); // Pass the session here?
const dataInsert = someCollection.insert(someObject, {session}).await().value;
const dataInsertOtherDocument = someOtherCollection.insert(someOtherObject, {session}).await().value;
bulk.find( { _id: someId } ).update( { $set: { testField: 3}}); //Or pass the session here?
bulk.find( { _id: someOtherId } ).update( { $set: { testField: 3}});
bulk.execute().await(); // Or pass the session here?
session.commitTransaction().await();
} finally {
session.endSession();
}