ArangoDB 的事務處理是通過 AQL(ArangoDB Query Language)來實現(xiàn)的
要在 ArangoDB 中執(zhí)行事務,請遵循以下步驟:
transaction
選項設置為 true
。例如,使用 JavaScript 的 arangojs 驅(qū)動程序:const { Database } = require('@arangodb');
const db = new Database({
url: 'http://localhost:8529',
databaseName: 'myDatabase',
auth: { username: 'root', password: 'mypassword' },
transaction: true
});
function (params) {
const { collections, db } = params;
// 獲取集合
const usersCollection = db._collection(collections.users);
const ordersCollection = db._collection(collections.orders);
// 插入用戶
const user = { name: 'John Doe', email: 'john.doe@example.com' };
const userResult = usersCollection.save(user);
// 插入訂單
const order = {
product: 'ArangoDB',
price: 199.99,
userId: userResult._key
};
const orderResult = ordersCollection.save(order);
return { userResult, orderResult };
}
db._executeTransaction()
方法,并傳入事務函數(shù)以及事務所需的參數(shù)。例如:async function executeTransaction() {
try {
const collections = {
users: 'users',
orders: 'orders'
};
const result = await db._executeTransaction(
{
write: [collections.users, collections.orders]
},
transactionFunction,
{ collections }
);
console.log('Transaction executed successfully:', result);
} catch (error) {
console.error('Error executing transaction:', error);
}
}
executeTransaction();
在這個示例中,我們首先創(chuàng)建了一個事務函數(shù),該函數(shù)在 users
和 orders
集合上執(zhí)行插入操作。然后,我們調(diào)用 db._executeTransaction()
方法來執(zhí)行事務。如果事務成功執(zhí)行,我們將輸出結(jié)果;否則,我們將輸出錯誤信息。
請注意,事務函數(shù)應該具有原子性,即要么全部成功執(zhí)行,要么全部失敗。這意味著如果在事務過程中發(fā)生錯誤,所有已執(zhí)行的操作都將被回滾。