如何在用户定义的函数中使用 AQL 函数?
How to use AQL functions inside user defined functions?
是否可以在用户定义的函数中使用标准 AQL 函数?
我试图在自定义函数中调用 IS_IN_POLYGON()
,但在执行时出现此错误:
Query: AQL: in function 'GEO::IS_IN_MULTIPOLYGON()': user function runtime error: ReferenceError: IS_IN_POLYGON is not defined at (…)
是否有任何前缀/require()/任何应该用于访问标准 AQL 函数的东西?
ArangoDB 版本:3.2.4
引擎:RocksDB
在这里回答我自己的问题。
可以通过这种方式在用户定义的函数中使用 AQL 函数:
(虚构 SOME_AQL_FUNCTION()
返回布尔值的示例)
let result = AQL_QUERY("RETURN SOME_AQL_FUNCTION(…)").json[0];
发现在ArangoDB的GitHub上阅读一些测试代码。
是的,可以在 UDF 函数内部使用 AQL 函数,包括其他 UDF。
这是一个完整的示例,使用 AQL 函数 LENGTH()
:
aqlfunctions.register('TEST::test', function(collection) {
'use strict';
const db = require('@arangodb').db;
const AQL_FUNCTION = db._query;
return (typeof collection == "string")
? AQL_QUERY('RETURN LENGTH(' + collection + ')').toArray()[0]
: return typeof collection;
}, false);
要使用 UDF 函数,只需按照您在 AQL 查询中使用的方式包含其命名空间(例如 ARRAY::PRODUCT
)。
警告:UDF 必须没有副作用。他们不应该以任何方式改变数据库状态。
ArangoDB 文档并不完全清楚如果 UDF 的 return 值以任何方式取决于数据库状态(如上例所示),可能会出现什么复杂情况。
是否可以在用户定义的函数中使用标准 AQL 函数?
我试图在自定义函数中调用 IS_IN_POLYGON()
,但在执行时出现此错误:
Query: AQL: in function 'GEO::IS_IN_MULTIPOLYGON()': user function runtime error: ReferenceError: IS_IN_POLYGON is not defined at (…)
是否有任何前缀/require()/任何应该用于访问标准 AQL 函数的东西?
ArangoDB 版本:3.2.4
引擎:RocksDB
在这里回答我自己的问题。
可以通过这种方式在用户定义的函数中使用 AQL 函数:
(虚构 SOME_AQL_FUNCTION()
返回布尔值的示例)
let result = AQL_QUERY("RETURN SOME_AQL_FUNCTION(…)").json[0];
发现在ArangoDB的GitHub上阅读一些测试代码。
是的,可以在 UDF 函数内部使用 AQL 函数,包括其他 UDF。
这是一个完整的示例,使用 AQL 函数 LENGTH()
:
aqlfunctions.register('TEST::test', function(collection) {
'use strict';
const db = require('@arangodb').db;
const AQL_FUNCTION = db._query;
return (typeof collection == "string")
? AQL_QUERY('RETURN LENGTH(' + collection + ')').toArray()[0]
: return typeof collection;
}, false);
要使用 UDF 函数,只需按照您在 AQL 查询中使用的方式包含其命名空间(例如 ARRAY::PRODUCT
)。
警告:UDF 必须没有副作用。他们不应该以任何方式改变数据库状态。
ArangoDB 文档并不完全清楚如果 UDF 的 return 值以任何方式取决于数据库状态(如上例所示),可能会出现什么复杂情况。