現在、TRANVERSAL機能をarangoDB 2からarangoDB 3に移行しています。aqlには、カスタムAQL関数(より具体的なフィルタリング用)を備えたカスタムリーフ訪問者とfilterVerticesオプションがあります。ArangoDB 2.8からArangoDB 3へのfilterVertice UDFの移行
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のフィルタケースに翻訳することが除外されるがありますか?私は、UDFを使用する場合
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}
は、パフォーマンスに影響されるようで、それらを手動で(フィルターを)LETのPARAMに結果を渡し、除外しますか?
とても面白い!私はこれらの行に沿った答えを期待していました。私はドキュメントから何も見逃していないことを確認する必要がありました。 残念ながら私の関数はユーザーの入力とコレクションの結果に依存しているので、FILTERステートメントですべてを変換するのがどれほど適切かはわかりませんが、あなたが言うことを得て、次のリファクタリング。 私はそれがロングショットであることは知っていますが、AQLに "if"文を含めることができれば、柔軟性が増します! 私は今すぐisDeterministicオプションを使用して、今後のアップデートの準備をしています。 – GeorgeKaf