对所有顶点进行多条件过滤的路径遍历
Path traversal with multiple conditions filter on all vertices
我想执行路径遍历,在所有顶点上应用多条件过滤器。
基本上我希望每个顶点都匹配 a == true
或 b == true
。
两者之一很容易做到:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'stix_graph'
FILTER p.vertices[*].a ALL == true
RETURN p
或者甚至两个条件重聚:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER p.vertices[*].a ALL == true AND p.vertices[*].b ALL == true
RETURN p
但我不知道如何在每个顶点上实现 a
或 b
...
您可以使用inline projection or inline filter来达到您想要的结果。
这是一个使用内联投影的示例 AQL:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER p.vertices[* RETURN CURRENT.a OR CURRENT.b] ALL == true
RETURN p
这是一个使用内联过滤器的示例 AQL:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER COUNT(p.vertices[* FILTER CURRENT.a OR CURRENT.b]) == COUNT(p.vertices)
RETURN p
重要说明:只有在遍历相对较小的图时,这种方法才会表现良好。如果你有非常大和深的图,性能可能会受到影响,因为 ArangoDB 查询优化器将内联投影和内联过滤器视为 CalculationNode
。 IE。 ArangoDB 不会在条件 returns false
的第一个顶点停止遍历。它必须继续遍历,因为过滤条件有一个计算值,它无法提前知道下一个顶点的计算结果是 true
还是 false
。因此,它会在幕后做一些额外的 traversals/calculations,但它仍然会 return 您期望的结果。
如果您想将此过滤器应用于一个非常大的图表,我认为正确的方法是为您的数据添加一些冗余并将 a == true
或 b == true
值放入您可以在过滤条件中有效使用的单独属性。
我想执行路径遍历,在所有顶点上应用多条件过滤器。
基本上我希望每个顶点都匹配 a == true
或 b == true
。
两者之一很容易做到:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'stix_graph'
FILTER p.vertices[*].a ALL == true
RETURN p
或者甚至两个条件重聚:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER p.vertices[*].a ALL == true AND p.vertices[*].b ALL == true
RETURN p
但我不知道如何在每个顶点上实现 a
或 b
...
您可以使用inline projection or inline filter来达到您想要的结果。
这是一个使用内联投影的示例 AQL:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER p.vertices[* RETURN CURRENT.a OR CURRENT.b] ALL == true
RETURN p
这是一个使用内联过滤器的示例 AQL:
FOR v, e, p IN 0..5 OUTBOUND 'objects/key' GRAPH 'graph'
FILTER COUNT(p.vertices[* FILTER CURRENT.a OR CURRENT.b]) == COUNT(p.vertices)
RETURN p
重要说明:只有在遍历相对较小的图时,这种方法才会表现良好。如果你有非常大和深的图,性能可能会受到影响,因为 ArangoDB 查询优化器将内联投影和内联过滤器视为 CalculationNode
。 IE。 ArangoDB 不会在条件 returns false
的第一个顶点停止遍历。它必须继续遍历,因为过滤条件有一个计算值,它无法提前知道下一个顶点的计算结果是 true
还是 false
。因此,它会在幕后做一些额外的 traversals/calculations,但它仍然会 return 您期望的结果。
如果您想将此过滤器应用于一个非常大的图表,我认为正确的方法是为您的数据添加一些冗余并将 a == true
或 b == true
值放入您可以在过滤条件中有效使用的单独属性。