我目前正在将arangoDB 2的TRAVERSAL函数迁移到arangoDB 3.aql有一个自定义叶子访问器和一个filterVertices选项以及一个自定义AQL函数(用于更具体的过滤)。从ArangoDB 2.8迁移过滤器Vertice UDF到ArangoDB 3
FOR result IN TRAVERSAL(
page,
menu,
"page/99999999999999",
"inbound",
{filterVertices : "udf::customFilter", visitor : "udf::customVisitor", }
) RETURN result
叶游客UDF相对容易转移,因为它仅仅是创建一个自定义对象,但我有自阿朗戈3图表功能已被删除与filterVertices UDF麻烦。
有一些情况下,像在filterVertices UDF
//check the page status
if (mismatch == 1) {
//stop traversal and not return mismatched
return ['exclude', 'prune'];
} else if (mismatch == 2) {
//stop but return mismatched
return 'prune';
} else {
//exclude mismatched but continue
return 'exclude';
}
我的问题下面是一个应该如何剪枝,并排除被过滤器的情况恰好低于AQL翻译?
FOR v, d, p IN 1..10 INBOUND "page/99999999999999" menu
LET filtered = CALL('udf::customFilter',v,p)
LET result = CALL('udf::customVisitor',v,d,p)
RETURN {filtered:filtered,result:result}
请问如果我使用UDF的性能受到影响是手动传递导致LET PARAM和排除(过滤器)呢?
太有意思了!我期待着这样的答案。我只需要确定我没有错过文档中的任何内容。 不幸的是,我的函数依赖于用户输入和收集结果,因此我不太确定在FILTER语句中将其全部转换是多么可行,但是我明白了你的意思,并且我将继续为下一轮重构。 我知道它很长,但如果你设法在AQL中包含“if”语句,它会增加大量的灵活性! 我正在使用isDeterministic选项来为将来的更新做好准备。 – GeorgeKaf