MongoDB-da tranzaksiyalar bir nechta hujjatlar (documents) ustida atomiklikni ta’minlash uchun ishlatiladi. Ya’ni, tranzaksiya ichidagi barcha operatsiyalar to’liq bajarilishi yoki umuman bajarilmasligi kerak.
Tranzaksiya ishlash mexanizmi
MongoDB tranzaksiyalarni replicated sharding yoki single replica set da qo‘llab-quvvatlaydi. Barcha operatsiyalar session ichida bajarilishi kerak va startTransaction metodi bilan boshlanadi.
Tranzaksiya ishlash jarayoni
- Session ochish -
startSession()
metodi orqali. - Tranzaksiyani boshlash -
session.startTransaction()
. - Bir nechta operatsiyalarni bajarish.
- Commit yoki rollback qilish.
Tranzaksiya misoli
import { MongoClient } from "mongodb";
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);
async function runTransaction() {
const session = client.startSession();
try {
session.startTransaction();
const usersCollection = client.db("mydb").collection("users");
const ordersCollection = client.db("mydb").collection("orders");
await usersCollection.updateOne(
{ _id: 1 },
{ $inc: { balance: -50 } },
{ session }
);
await ordersCollection.insertOne(
{ userId: 1, amount: 50, status: "pending" },
{ session }
);
await session.commitTransaction();
console.log("Transaction committed successfully");
} catch (error) {
await session.abortTransaction();
console.error("Transaction aborted due to error:", error);
} finally {
await session.endSession();
await client.close();
}
}
runTransaction();
Tranzaksiya xatoliklarni qo‘lga olish
Agar tranzaksiya davomida xatolik yuz bersa, u avtomatik ravishda bekor qilinishi kerak. Buning uchun abortTransaction qo‘llaniladi.
Tranzaksiya qo‘llanilishi lo‘yiq bo‘lgan holatlar
- Bir nechta kolleksiyalarda bir vaqtning o‘zida ma’lumotlarni yangilash.
- Pul o‘tkazmalarida ma’lumotlar yo‘qotilishini oldini olish.
- Kiritilgan ma’lumotlarning to‘liqligini tekshirish.
Xulosa
MongoDB tranzaksiyalari ko‘p hujjatli operatsiyalarda ma’lumotlarning yaxlitligini ta’minlash uchun qulay vositadir. Uni ishlatishda session va error handling muhim o‘rin tutadi.