【问题标题】:How to check for Vertex Matching in ArangoDB如何在 ArangoDB 中检查顶点匹配
【发布时间】:2019-09-03 11:07:51
【问题描述】:

我在 ArangoDB 中创建了两个集合,一个文档集合“节点”和一个边缘集合“路径”。我所有的节点都有一个名称属性,并由边连接。

我的遍历有1..10的可变深度,它将找到以下路径:

start - decide
start - decide - execute1
start - decide - execute2
start - decide - execute1 - error
start - decide - execute2 - end
start - decide - execute1 - execute2 - end
start - decide - execute1 - execute2 - error
start - decide - execute2 - execute3 - end

我尝试以下查询来查找以结束或错误节点结尾的路径:

FOR v, e, p IN 1..10 OUTBOUND 'Node/start_0' Path     
OPTIONS { bfs: true}     
FILTER (v.name == "end" OR v.name == "error")     
RETURN CONCAT_SEPARATOR(' - ', p.vertices[*].name)

它给了我以下 4 个结果

[
    start - decide - execute1 - error
    start - decide - execute2 - end
    start - decide - execute1 - execute2 - end
    start - decide - execute1 - execute2 - error
    start - decide - execute2 - execute3 - end
] 

在这里我想做一个额外的模式匹配检查,我想列出其中具有特定顶点序列的结果。

我想列出其中包含序列decide execute1 execute2 的结果 即,我的结果应该如下所示:

     [
     start - decide - execute1 - execute2 - end
     start - decide - execute1 - execute2 - error 
     ]

我尝试将以下过滤条件添加到我的查询中,但它不起作用

FILTER LIKE(p.vertices[*].name, "%decide - execute1 - execute2%", true)

有人可以帮我解决这个问题

【问题讨论】:

    标签: arangodb graph-traversal


    【解决方案1】:

    我相信如果您将主查询移动到子查询中,然后再应用过滤器,这应该可以工作,例如类似:

    FOR path IN (
        FOR v, e, p IN 1..10 OUTBOUND 'Node/start_0' Path     
        OPTIONS { bfs: true}     
        FILTER (v.name == "end" OR v.name == "error")     
        RETURN CONCAT_SEPARATOR(' - ', p.vertices[*].name)
    )
    FILTER LIKE(path, "%decide - execute1 - execute2%", true)
    RETURN path
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多