繁体   English   中英

具有多个条件的路径遍历会在所有顶点上过滤

[英]Path traversal with multiple conditions filter on all vertices

我想执行路径遍历,在所有顶点上应用多条件过滤器。

基本上,我希望每个顶点都匹配a == trueb == 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

但是我看不到如何在每个顶点上获得ab ...

您可以使用嵌入式投影嵌入式过滤器来获得所需的结果。

这是使用内联投影的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 即,ArangoDB不会在条件返回false的第一个顶点上停止遍历。 这将有继续穿越,因为过滤条件有一个计算值,并不能预先知道是否计算的结果是truefalse下一个顶点。 因此,它会在后台进行一些额外的遍历/计算,但仍会返回您期望的结果。

如果您想将此过滤器用于一个非常大的图形,我相信正确的方法是在数据中添加一些冗余,然后将a == trueb == true值放入一个可以有效使用的单独属性中在您的过滤条件下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM