//const client1 = require('./demo'); const { MongoClient } = require('mongodb'); const uri = ('mongodb+srv://gayatriparekh:gayu%40211@cluster0.9fplife.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0'); const client = new MongoClient(uri); async function connectToMongoDB() { await client.connect(); console.log("Connected to MongoDB"); } connectToMongoDB(); performTransaction() async function performTransaction(){//(sessionId) { /* const session = client.startSession(); session.startTransaction(); */ const sessionId = client.startSession(); sessionId.startTransaction(); console.log("Transaction started...") try { const db = client.db('gkdbase'); const collection = db.collection('testcol'); const undoLog = db.collection('undo_log'); const result1 = await collection.insertOne({ name: 'Ashish' }, { sessionId }); await undoLog.insertOne({ sessionId, operation: 'delete', documentId: result1.insertedId }, { sessionId }); const result2 = await collection.insertOne({ name: 'Rekha' }, { sessionId }); await undoLog.insertOne({ sessionId, operation: 'delete', documentId: result2.insertedId }, { sessionId }); //await session.commitTransaction(); await sessionId.commitTransaction(); console.log(`Transaction ${sessionId} committed successfully`); } catch (error) { //await session.abortTransaction(); await sessionId.abortTransaction(); console.error(`Transaction ${sessionId} aborted: ${error}`); } finally { // session.endSession(); sessionId.endSession(); } } async function undoTransaction(sessionId) { const session = client.startSession(); session.startTransaction(); try { const db = client.db('gkdbase'); const collection = db.collection('testcol'); const undoLog = db.collection('undo_log'); const dbLocal =client.db('local'); const oploggk= dbLocal.collection('oplog.rs'); const abortTrans= await oploggk.find({sessionId}).toArray(); for (let gop of abortTrans) { if (gop.transactionState === 'abort') { } else { await undoLog.updateOne({ _id: op.documentId }, { $set: op.originalDocument }, { session }); } } const undoOperations = await undoLog.find({ sessionId }).toArray(); for (let op of undoOperations) { if (op.operation === 'delete') { await collection.deleteOne({ _id: op.documentId }, { session }); } else if (op.operation === 'insert') { await collection.insertOne(op.document, { session }); } else if (op.operation === 'update') { await collection.updateOne({ _id: op.documentId }, { $set: op.originalDocument }, { session }); } } await session.commitTransaction(); console.log(`Undo transaction ${sessionId} committed successfully`); } catch (error) { await session.abortTransaction(); console.error(`Undo transaction ${sessionId} aborted: ${error}`); } finally { session.endSession(); } } module.exports = performTransaction;