我目前正在將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