Transaction trong MongoDB cho phép bạn thực hiện một hoặc nhiều thao tác cơ sở dữ liệu một cách an toàn và nhất quán. Với transaction, bạn có thể nhóm nhiều câu lệnh truy vấn thành một đơn vị duy nhất, đảm bảo rằng tất cả các thao tác sẽ thành công hoặc thất bại đồng thời. Điều này đặc biệt hữu ích trong các tình huống yêu cầu tính toàn vẹn dữ liệu, như khi bạn cần phải đảm bảo rằng một số thao tác trên nhiều collection đều phải thành công.
MongoDB hỗ trợ transaction cho cả sharded clusters và replica sets, cho phép bạn quản lý các thao tác trên nhiều tài liệu (documents) hoặc collection mà không lo lắng về việc dữ liệu bị không đồng bộ.
Để bắt đầu một transaction, trước tiên bạn cần tạo một session.
const session = client.startSession();
Sử dụng session để bắt đầu một transaction.
session.startTransaction();
Thực hiện các thao tác CRUD (Create, Read, Update, Delete) mà bạn muốn đưa vào transaction.
try {
// Thao tác đầu tiên
await collection1.insertOne({ /* dữ liệu */ }, { session });
// Thao tác thứ hai
await collection2.updateOne({ /* điều kiện */ }, { /* cập nhật */ }, { session });
// Thao tác thứ ba
await collection3.deleteOne({ /* điều kiện */ }, { session });
// Cam kết transaction
await session.commitTransaction();
} catch (error) {
// Nếu có lỗi, rollback transaction
await session.abortTransaction();
console.error('Transaction aborted due to error:', error);
} finally {
session.endSession(); // Kết thúc session
}
commitTransaction()
để lưu lại tất cả các thay đổi.abortTransaction()
để hoàn tác tất cả các thay đổi.Transaction là một tính năng mạnh mẽ trong MongoDB, giúp bạn quản lý dữ liệu một cách an toàn và nhất quán. Bằng cách sử dụng đúng cách, bạn có thể đảm bảo rằng các thao tác trên dữ liệu được thực hiện một cách hiệu quả, đồng thời duy trì tính toàn vẹn của dữ liệu.