databasemongodbtransactionsnosqlacid

Do MongoDB transaction updates be reflected on the database before it is commited?


  const client = new MongoClient(uri);
  await client.connect();
  await client
    .db('mydb1')
    .collection('foo');
  const session = client.startSession();
  const transactionOptions = {
    readPreference: 'primary',
    readConcern: { level: 'local' },
    writeConcern: { w: 'majority' }
  };
  try {
    await session.withTransaction(async () => {
      const coll1 = client.db('mydb1').collection('foo');
      await coll1.insertOne({user_id: 12344,  paid: true }, { session });
      // will the inertOne above be reflected on the collection at this point?
      // i.e., if any query is made at this point, will it see the insertOne?
      await calls_third_party_payment_vendor_api_to_process_payment();
    }, transactionOptions);
 } finally {
    await session.endSession();
    await client.close();
  }

Do MongoDB transaction updates be reflected on the database before it is commited?


Solution

  • No, from the docs:

    For operations in a multi-document transaction, when a transaction commits, all data changes made in the transaction are saved and visible outside the transaction. That is, a transaction will not commit some of its changes while rolling back others.

    Until a transaction commits, the data changes made in the transaction are not visible outside the transaction.