ArangoDB 的事务处理是通过 AQL(ArangoDB Query Language)来实现的
- 开始事务:
要开始一个事务,您需要使用
db._beginTransaction()
方法。这将启动一个新的事务,并返回一个事务 ID(tid)。
const db = require('@arangodb').db; const transactionId = db._beginTransaction();
- 执行事务操作:
在事务中,您可以执行多个数据库操作,例如插入、更新、删除或查询文档。所有这些操作都需要在事务上下文中执行。要执行一个操作,您需要使用
db._query()
方法,并在查询中指定事务 ID。
例如,以下代码将在名为 “myCollection” 的集合中插入一个新文档:
const collection = db.collection('myCollection'); const document = { name: 'John Doe', age: 30 }; const query = `FOR doc IN myCollection INSERT doc IN myCollection OPTIONS { force: true } IN TRANSACTION @tid`; db._query(query, { tid: transactionId });
请注意,事务中的所有操作都必须在一个单一的事务上下文中执行。这意味着,如果在事务过程中出现错误,您需要捕获异常并回滚事务。
- 提交事务:
如果所有操作都成功执行,您可以使用
db._commitTransaction()
方法提交事务。这将使事务中的所有更改生效,并释放事务资源。
try { // 执行事务操作 db._commitTransaction(); } catch (error) { // 如果出现错误,回滚事务 db._rollbackTransaction(); throw error; }
- 回滚事务:
如果在事务过程中出现错误,您需要捕获异常并使用
db._rollbackTransaction()
方法回滚事务。这将撤销事务中的所有更改,并将数据库恢复到事务开始之前的状态。
try { // 执行事务操作 db._commitTransaction(); } catch (error) { // 如果出现错误,回滚事务 db._rollbackTransaction(); throw error; }
总之,ArangoDB 的事务处理包括开始事务、执行事务操作、提交事务和回滚事务。在执行事务操作时,请确保在一个单一的事务上下文中执行所有操作,并在出现错误时捕获异常并回滚事务。