MongoDB 4.0 及以上版本支持多文檔事務,事務可以保證一系列操作的原子性,即要么全部成功,要么全部失敗。這對于需要高并發(fā)、高一致性的應用場景非常有用,例如金融交易、庫存管理等。
以下是 MongoDB 事務處理的基本步驟:
啟動事務:
使用 session.startTransaction()
方法啟動一個新的事務。
const session = client.startSession();
session.startTransaction();
執(zhí)行操作:
在事務中執(zhí)行需要原子性的操作,例如插入、更新或刪除文檔。這些操作需要在同一個會話(session)中進行。
// 示例:插入一個文檔
const collection = db.getCollection('myCollection');
collection.insertOne({ name: 'John Doe', age: 30 }, { session });
// 示例:更新一個文檔
collection.updateOne({ name: 'John Doe' }, { $set: { age: 31 } }, { session });
提交或回滾事務:
如果所有操作都成功執(zhí)行,則提交事務。如果任何一個操作失敗,則回滾事務。
try {
// 執(zhí)行一系列操作
// ...
// 提交事務
session.commitTransaction();
} catch (error) {
// 回滾事務
session.abortTransaction();
throw error;
} finally {
// 結(jié)束會話
session.endSession();
}
注意:事務不支持跨分片集群和副本集。在使用事務時,請確保您的操作在同一個分片或副本集中執(zhí)行。
此外,MongoDB 還提供了一些高級事務功能,例如樂觀并發(fā)控制、多文檔 ACID 事務等。您可以根據(jù)具體需求選擇合適的事務處理策略。