【发布时间】:2017-01-09 16:50:23
【问题描述】:
我目前正在将 TRAVERSAL 函数从 arangoDB 2 迁移到 arangoDB 3。aql 有一个自定义叶子访问者和一个带有自定义 AQL 函数的 filterVertices 选项(用于更具体的过滤)。
FOR result IN TRAVERSAL(
page,
menu,
"page/99999999999999",
"inbound",
{filterVertices : "udf::customFilter", visitor : "udf::customVisitor", }
) RETURN result
叶子访问者 UDF 相对容易传输,因为它只是创建一个自定义对象,但我在使用 filterVertices UDF 时遇到了问题,因为在 arango 3 中,图形函数已被删除。
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 中的 FILTER 案例中准确翻译 prune 和 exclude ?
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 参数并手动排除(过滤)它们,性能会受到影响吗?
【问题讨论】: