在ArangoDB中添加/调用非AQL服务器端函数?

在ArangoDB中添加/调用非AQL服务器端函数?,arangodb,Arangodb,我知道ArangoDB允许在服务器端定义Javascript函数,但是否可以定义可以在事务期间调用的服务器端Javascript函数 我使用Java驱动程序连接到ArangoDB,ArangoDB以字符串的形式执行事务 为了避免每次发送一个大而复杂的字符串(我使用的一个事务大约有500行),我更喜欢将其存储在服务器端,并更简单地从Java调用 例如,不运行类似以下内容的操作: String action = "function (params) {" + "const

我知道ArangoDB允许在服务器端定义Javascript函数,但是否可以定义可以在事务期间调用的服务器端Javascript函数

我使用Java驱动程序连接到ArangoDB,ArangoDB以字符串的形式执行事务

为了避免每次发送一个大而复杂的字符串(我使用的一个事务大约有500行),我更喜欢将其存储在服务器端,并更简单地从Java调用

例如,不运行类似以下内容的操作:

String action = "function (params) {"
              + "const db = require('@arangodb').db;"
              + "return db._query('FOR i IN test RETURN i._key').toArray();"
              + "}";
String[] keys = arango.db().transaction(action, String[].class, new TransactionOptions());
String action = "my_function";
String[] keys = arango.db().transaction(action, String[].class, new TransactionOptions());
我想称之为:

String action = "function (params) {"
              + "const db = require('@arangodb').db;"
              + "return db._query('FOR i IN test RETURN i._key').toArray();"
              + "}";
String[] keys = arango.db().transaction(action, String[].class, new TransactionOptions());
String action = "my_function";
String[] keys = arango.db().transaction(action, String[].class, new TransactionOptions());
或:


这可能实现吗?

您可以使用编写自定义端点


它是一个用JavaScript编写的微服务框架,允许您在服务器端执行复杂的JS代码,并访问ArangoDB的内部JSAPI(等等)。您可以封装其中的任何业务逻辑,例如500行事务代码,并添加一些参数从外部控制它,而无需每次发送所有代码。

我考虑过类似的事情,但在我的情况下,我需要的事务是相当动态的(基于一些java业务逻辑),因此,在不复制/迁移所有现有逻辑的情况下,设置Foxx端点并不容易。它们都需要一些共享函数,目前在每个事务中都会重复这些函数,所以这是我想将其移到服务器端的主要部分。您可以创建一个包含共享函数的服务,然后从其他端点调用它。链接服务的文档可在此处找到: