在ArangoDB中使用路径标签过滤邻居的入站折点

1wnzp6jl  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(141)

我有下面的图表:

我想写一个AQL查询,它返回从绿色开始顶点开始的所有红色入界顶点。
我尝试了以下AQL从绿色顶点检索红色顶点。

WITH collection_A, collection_W
LET A_Neighbors = (FOR t IN collection_edges
                    FILTER t._to == 'collection_W/W'
                    RETURN t._from)
                    
let all_w = []
for item in A_Neighbors
    let sub_w = (for v1 in collection_edges
                        FILTER v1._to == item
                        return v1 )
    return APPEND(all_w, sub_w)

除此之外,还有什么好的解决方案吗?因为我不确定这是否给出了起始顶点collection_W/W的正确值。
我的collection_edges包含以下两种文档。

{
 _from: collection_W/w,
 _to: collection_A/a,
 label: INBOUND
}

{
 _from: collection_A/a,
 _to: collection_W/w,
 label: OUTBOUND
}
sc4hvdpw

sc4hvdpw1#

给定图,我建议使用图遍历特定的[min[..max]]值,如下所示(使用匿名图):

WITH collection_A, collection_W
FOR vertex IN 2 ANY 'collection_W/W' // green start node
    collection_edges
    RETURN vertex

[min[..max]]值可以是一个范围(1..3),也可以是单个值(1)。

  • 0将返回起始节点
  • 1将返回相邻节点
  • 2将跳过相邻节点,仅返回下一级别的节点(如果有)
  • 2..999将返回起始节点的所有节点(最多999跳)

此外,如果要确保只返回特定集合中的节点,请为此添加筛选器:

WITH collection_A, collection_W
FOR vertex IN 2 ANY 'collection_W/W' // green start node
    collection_edges
    FILTER IS_SAME_COLLECTION('collection_W', vertex)
    RETURN vertex

也可以对边进行过滤(如果已将特定属性/值添加到边):

WITH collection_A, collection_W
FOR vertex, edge IN 2 ANY 'collection_W/W' // green start node
    collection_edges
    FILTER edge.someProperty == 'someValue' // only return vertices that are beyond matching edges
    RETURN vertex

或者使用PRUNE限制遍历:

WITH collection_A, collection_W
FOR vertex, edge IN 2 ANY 'collection_W/W' // green start node
    collection_edges
    PRUNE edge.someProperty == 'someValue' // stop traversal when this is matched
    RETURN vertex

相关问题