Node.js ArangoDB交易不存在';不要在出错时回滚
更新:找到解决方案。ARANGODB群集不支持事务。它仅在单个实例上受支持 我正在尝试使用arangoJS库使用事务函数。我将介绍的函数只是一个伪函数,它插入两条记录,然后尝试获取一个不存在的文档。获取不存在的文档会生成错误,事务必须回滚。实际上,在尝试获取不存在的文档后会生成错误。但是,数据库不会回滚,插入的两个文档仍会插入到数据库中。有人知道怎么解决吗Node.js ArangoDB交易不存在';不要在出错时回滚,node.js,transactions,arangodb,arangojs,Node.js,Transactions,Arangodb,Arangojs,更新:找到解决方案。ARANGODB群集不支持事务。它仅在单个实例上受支持 我正在尝试使用arangoJS库使用事务函数。我将介绍的函数只是一个伪函数,它插入两条记录,然后尝试获取一个不存在的文档。获取不存在的文档会生成错误,事务必须回滚。实际上,在尝试获取不存在的文档后会生成错误。但是,数据库不会回滚,插入的两个文档仍会插入到数据库中。有人知道怎么解决吗 "updateCustomer" : function (options, cb) { const action = String(
"updateCustomer" : function (options, cb) {
const action = String(function (params) {
// This code will be executed inside ArangoDB!
const db = require('@arangodb').db;
const aql = require('@arangodb').aql;
const customer = db._collection('customer');
try{
//insert two documents
db._query(aql`INSERT ${params.user} INTO ${customer} Return NEW`);
db._query(aql`INSERT ${params.customer} INTO ${customer} Return NEW`);
//Get a document that doesn't exist
customer.document('does-not-exist');
}catch(e){
throw new Error("Everything is bad");
}
});
let opts = {
collections : {
read : ["customer"],
write : ["customer"]
},
action : action,
params : {user: options, customer: options},
lockTimeout : 5
};
Arango.transaction(opts,(err, result) => {
console.log("err: " + err);
console.log("result: " + JSON.stringify(result));
return cb(err, result);
});
}
"transaction" : function (options, cb) {
utils.dbConnect().transaction(options.collections, options.action, options.params, options.lockTimeout, cb);
}
更新:我在ArangoDB的一个实例上尝试了这个事务,它成功了。但是,它在集群上不起作用。ArangoDB集群上不支持事务吗?ArangoDB集群中的单文档操作是原子操作。目前还没有多文档。我们目前正在开发用于多文档操作的ACID。单文档操作是arangodb集群中的原子操作。目前还没有多文档。我们目前正在研究用于多文档操作的ACID