Skip to main content

Command Palette

Search for a command to run...

How to Use MongoDB Transactions & Rollbacks

Published
•1 min read•View as Markdown
A

Frontend Developer with 3 years of experience building scalable, SEO-optimized web applications using React.js, Next.js, and modern JavaScript ecosystems. Skilled in performance optimization, advanced state management (Redux, React Query), and driving frontend architecture decisions within Agile development teams.

Transaction কী?

Transaction এর মাধ্যমে একাধিক ডাটাবেইস অপারেশন একসাথে execute হয়, এবং সবগুলো সফল হলে তবেই ডাটাবেজে স্থায়ীভাবে save হয়।

যদি কোনো একটি অপারেশন fail করে, তাহলে সবকিছু rollback হয়ে যায় — অর্থাৎ, কোনো ডেটা চেঞ্জই হয় না।

উদাহরণ: ধরো তুমি একজন ইউজারকে create করছো এবং তার account-এর জন্য একটা balance সেট করছো। ইউজার তৈরি হলেও যদি balance সেট করতে গিয়ে error হয়, তাহলে পুরো process টা undo হয়ে যাবে — যাতে inconsistent ডেটা না থাকে।

Rollback কী?

Rollback মানে হল পূর্ববর্তী অবস্থায় ফিরে যাওয়া। অর্থাৎ, যদি transaction-এর মাঝখানে কোনো সমস্যা হয়, তাহলে আগের যেই সব কাজ হয়েছিল, সেগুলোকেও undo করে ফেলা হয়।

✅ Mongoose-এ Transaction কিভাবে কাজ করে?

Mongoose/MongoDB-তে transaction ব্যবহার করতে হলে session শুরু করতে হয়।

const mongoose = require('mongoose');

const runTransaction = async () => {
  const session = await mongoose.startSession(); // Session শুরু
  session.startTransaction(); // Transaction শুরু

  try {
    // প্রথম কাজ: ইউজার তৈরি
    const user = await User.create([{ name: 'Zaki' }], { session });

    // দ্বিতীয় কাজ: অ্যাকাউন্ট তৈরি
    const account = await Account.create([{ userId: user[0]._id, balance: 1000 }], { session });

    await session.commitTransaction(); // সবকিছু ঠিকঠাক হলে save করে ফেলে
    console.log('Transaction committed successfully.');
  } catch (error) {
    await session.abortTransaction(); // সমস্যা হলে rollback করে
    console.error('Transaction failed and rolled back:', error.message);
  } finally {
    session.endSession(); // Session শেষ
  }
};

runTransaction();

More from this blog

🚀 Docker Bind Mount ও Anonymous Volume ব্যবহার করে Local Codebase এর সাথে Container যুক্ত করা —

➡️ যখন আমরা bind mount ব্যবহার করি, তখন আমরা host machine-এর নির্দিষ্ট কোনো ফোল্ডার ঠিক করে দিই, যেটা কন্টেইনারের কোনো ফোল্ডারের সঙ্গে সরাসরি যুক্ত হয়ে যায়। এতে কন্টেইনারে পরিবর্তন করলে লোকাল ফাইলেও সেটা সাথে সাথে দেখা যায় — একেবারে রিয়েল টাইমে। 🧠...

Jul 3, 20253 min read

🚢 ডকার ভলিউম (Docker Volumes)

ডকার ভলিউম (Docker Volumes) : ডকার ভলিউম এমন একটি পদ্ধতি, যার মাধ্যমে কনটেইনারের ভিতরের ডেটা হোস্ট মেশিনে সংরক্ষণ করা যায়।যা ডকার কন্টেইনারের মধ্যে ডেটা সংরক্ষণ এবং শেয়ার করার জন্য ব্যবহৃত হয়। এটি ডেটাকে পারসিস্ট (স্থায়ীভাবে রাখা) করতে সাহায্য করে...

Jun 26, 20252 min read

🐳 Docker Registry ও Repository: এক নজরে সহজ ব্যাখ্যা

🗂️ Docker Registry Docker Registry হল একটি centralized location যেখানে Docker কন্টেইনার ইমেজগুলি সংরক্ষণ এবং শেয়ার করা হয়। এটি পাবলিক বা প্রাইভেট হতে পারে। 👉 Docker Hub একটি পাবলিক রেজিস্ট্রি যা যে কেউ ব্যবহার করতে পারে এবং এটি ডিফল্ট রেজিস্ট্রি। ...

Apr 15, 20252 min read

🐳 Docker Image ও Container বোঝার জন্য সহজ ব্যাখ্যা (Class এর সাথে তুলনা)

Docker Image হচ্ছে Docker container রান করার জন্য একটি ব্লুপ্রিন্ট। Docker Image হচ্ছে একটি executable ফাইল, যার মধ্যে আমাদের অ্যাপ্লিকেশন রান করার জন্য প্রয়োজনীয় সব instruction, configuration এবং dependency আগে থেকেই সংরক্ষিত থাকে। অর্থাৎ, আমরা ...

Apr 14, 20251 min read

Untitled Publication

13 posts