![](/img/trans.png)
[英]How to get all vertices in ArangoDB graph traversal without max?
[英]How to eliminate all paths that pass through particular document or vertex while during Graph Traversal in ArangoDB
我正在尝试在这里进行图遍历
我在ArangoDB中创建了两个集合,一个文档集合"Node"
和一个边缘集合"Path"
。 我所有的节点都有一个name
属性(标签),并通过边(线)连接,如上图所示。
我在下面的查询中尝试查找以end或error节点结尾的路径:
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)
上面的查询按预期工作,并返回两个路径:
["start - decide - execute1 - error"
"start - decide - execute2 - end"]
但是我正在探索如何消除通过特定节点的所有相应路径。 例如,我要消除所有通过execute1的路径。 我试过这个查询:
FOR v, e, p IN 1..10 OUTBOUND 'Node/start_0' Path
OPTIONS { bfs: true}
FILTER ((v.name == "end" OR v.name == "error") AND v.name != "execute1")
RETURN CONCAT_SEPARATOR(' - ', p.vertices[*].name)
但这是行不通的-它仍然返回两条路径。
谁能帮助我重新构造该查询,使其仅返回一条路径,即“开始-决定-execute2-结束”?
遍历的深度为1..10,可以找到以下路径:
请注意,如何同时返回具有一跳(1)和两跳(2、3)的路径。 它们在1到10跳之内。 您可能希望遍历只会发出叶节点(4,5)。 但是,它为您提供了所有五个路径。
您的name
属性FILTER条件针对v
进行了测试, v
代表每个路径的最后一个顶点 。
"decide"
不等于"end"
或"error"
,因此路径1被过滤掉。 "execute1"
和"execute2"
不等于"end"
或"error"
,因此路径2和3也被过滤掉。 "error"
和"end"
等于这些值中的任何一个,但它们也满足条件!= "execute1"
-您正在针对停止节点而不是路径上的所有节点进行测试,因此行为是正确的,但不是你想要的 您的选择是:
"execute1"
的顶点的所有路径: FILTER p.vertices[*].name NONE == "execute1" AND v.name IN ["end", "error"]
PRUNE
(自v3.4.5和v3.5.0起可用)通过"execute1"
: PRUNE v.name == "execute1" … FILTER v.name IN ["end", "error"]
"execute1"
, "end"
或"error"
(针对上述查询的优化): PRUNE v.name IN ["execute1", "end", "error"] … FILTER v.name IN ["end", "error"]
请注意, PRUNE
将包含条件为真的顶点,即发现路径2,但随后由FILTER
条件过滤掉。 仅PRUNE
不会过滤出路径2。 但是,它将阻止遍历从"execute1"
继续进行,这意味着将不会发现路径4。 FILTER
从结果中删除路径1、2和3,仅保留路径5。
另请注意,必须将PRUNE
子句放在OPTIONS
之前!
FOR v, e, p IN 1..10 OUTBOUND 'Node/start_0' Path
PRUNE v.name IN ["execute1", "end", "error"]
OPTIONS { bfs: true }
FILTER v.name IN ["end", "error"]
RETURN CONCAT_SEPARATOR(' - ', p.vertices[*].name)
结果: [ "start - decide - execute2 - end" ]
文档: 图遍历中的修剪
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.