针对不同顶点类型使用不同过滤器的ArangoDB图遍历

针对不同顶点类型使用不同过滤器的ArangoDB图遍历,arangodb,graph-traversal,Arangodb,Graph Traversal,我需要能够过滤arangodb图遍历的顶点类型。有两种顶点类型,比如vA和vB。只有一种类型的边可以将_连接到任何一种类型的顶点 vA有一个带有数值的属性“pfi”。 vB有一个属性“Alias”,它是一个字典(文档),包含几个属性/值对(整数为字符串):整数。整数作为字符串属性包含与vA中pfi属性相同的数据/数字 我从每个起始顶点p0开始(在查询的前面确定)。每个p0都有属性“零点id”和“pfi” 我需要在出站方向上进行遍历,并且只保留以下路径:vA类型的所有顶点都具有与p0.pfi匹配的

我需要能够过滤arangodb图遍历的顶点类型。有两种顶点类型,比如vA和vB。只有一种类型的边可以将_连接到任何一种类型的顶点

vA有一个带有数值的属性“pfi”。 vB有一个属性“Alias”,它是一个字典(文档),包含几个属性/值对(整数为字符串):整数。整数作为字符串属性包含与vA中pfi属性相同的数据/数字

我从每个起始顶点p0开始(在查询的前面确定)。每个p0都有属性“零点id”和“pfi”

我需要在出站方向上进行遍历,并且只保留以下路径:vA类型的所有顶点都具有与p0.pfi匹配的“pfi”,vB类型的所有顶点都具有与pfi匹配的“alias”属性

FOR p0 in points
    FOR v, e, p IN 1..5 OUTBOUND p0['zero point id'] GRAPH 'grph'
        FILTER p.vertices[*]['pfi'] ALL == p0['pfi']
            OR p.vertices[*]['aliases'][TO_STRING(p0['pfi'])] NONE == null
        RETURN {
            'pfi': p0['pfi']
            , 'vertices': p.vertices
            , 'edges': p.edges
        }
我在上面尝试了几种语法变体,所有这些都具有相同的行为:如果删除过滤器,我会得到所有(未过滤的)路径,而过滤器的结果为空。我认为这是因为所有路径都包含这两种顶点类型,OR的逻辑并不意味着任何一个顶点都可以通过

如何对其进行措辞,使第一个条件适用于vA类型,第二个条件适用于vB类型?

我发现了以下内容:,可以对其进行调整

FOR p0 in points
    FOR v, e, p IN 1..5 OUTBOUND p0['zero point id'] GRAPH 'grph'
        LET counter = (
            FOR v2 in p.vertices
                FILTER v2['pfi'] == p0['pfi']
                    OR HAS(v2['aliases'], TO_STRING(p0['pfi']))
            RETURN v2
        )
        FILTER COUNT(counter) == COUNT(p.vertices)
RETURN {
    'pfi': p0['pfi']
    , 'edges': p.edges
}
这是可行的,但感觉像是一个笨拙的解决办法。还有更优雅的方式吗