Ich migriere gerade eine TRAVERSAL-Funktion von arangoDB 2 nach arangoDB 3. Die aql hatte einen benutzerdefinierten leaf-Besucher und eine filterVertices-Option mit einer benutzerdefinierten AQL-Funktion (für spezifischere Filterung).Migration einer filterVertice UDF von ArangoDB 2.8 nach ArangoDB 3
FOR result IN TRAVERSAL(
page,
menu,
"page/99999999999999",
"inbound",
{filterVertices : "udf::customFilter", visitor : "udf::customVisitor", }
) RETURN result
Das Blatt Besucher war UDF relativ einfach zu übertragen, da es schafft nur ein benutzerdefiniertes Objekt, aber ich habe Probleme mit dem filterVertices UDF da in arango 3 die Grafikfunktionen wurden entfernt.
Es gibt einige Fälle, wie die unten in der 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';
}
Meine Frage ist, wie sollte der Pflaume und verstehen sich inklusive unten genau in FILTER Fällen im aql übersetzt werden?
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}
Wird die Leistung beeinträchtigt werden, wenn ich die UDF wie und übergeben Sie das Ergebnis in einem LET param und ausschließen (Filter), um sie manuell bedienen?
So interessant! Ich hatte eine Antwort in dieser Richtung erwartet. Ich musste nur sicher sein, dass ich nichts aus der Dokumentation vermisste. Leider hängen meine Funktionen von Benutzereingaben und Sammlungsergebnissen ab, daher bin ich mir nicht so sicher, wie machbar es wäre, alles in FILTER-Anweisungen zu konvertieren, aber ich bekomme, was du sagst, und ich werde es für die nächste Refactoring-Runde behalten . Ich weiß, es ist ein Longshot, aber wenn Sie es schaffen, "wenn" -Aussagen in die AQL zu integrieren, würde es Tonnen von Flexibilität hinzufügen! Ich verwende die isDeterministic-Option für jetzt nur für zukünftige Updates bereit sein. – GeorgeKaf