使用 OrientDB 递归遍历有向边
Traverse directed edges recursively with OrientDB
我正在尝试递归遍历给定节点的出站边缘,而不是入站边缘。我想要查询结果中的外边和外顶点。
下图中,从(a)开始,我需要(a)、(b)、(c)、(d)、(e),包括边,但不包括(c)之后的部分, 即 <-- (x)
(a) --> (b) --> (c) <-- (x)
˙--> (d) --> (e)
如果我尝试执行以下操作,则无论边缘方向如何,它都会递归遍历所有内容,因此也会返回 (x):
TRAVERSE * FROM (SELECT FROM a) LIMIT -1`
如果我不t traverse *, but
outE()`,它只会检索起始节点及其直接邻居:(a)、(b)、(d),因此它不会进行递归。
traverse outE() from (SELECT FROM a) LIMIT -1
我也尝试按照 here 的文档进行操作,并遍历了 V.out, E.in
但它只是 returns (a) 而没有遍历。
traverse V.out, E.in from (SELECT FROM a) LIMIT -1`
也尝试过变体,例如 WHILE $depth < 10
,但这没有任何区别,现在我被卡住了。
运行 OrientDB 2.0.12
图表:
从#33:289990 开始递归地只获取输出边的遍历查询:
traverse out('IsFriendsWith') from #33:289990
递归地获取多于一条边的遍历查询class 传出顶点:
traverse out('IsFriendsWith'), out('secondEdgeClassName') from #33:289990
递归获取边和顶点实例的遍历查询:
traverse out('IsFriendsWith'), outE('IsFriendsWith') from #33:289990
我正在尝试递归遍历给定节点的出站边缘,而不是入站边缘。我想要查询结果中的外边和外顶点。
下图中,从(a)开始,我需要(a)、(b)、(c)、(d)、(e),包括边,但不包括(c)之后的部分, 即 <-- (x)
(a) --> (b) --> (c) <-- (x)
˙--> (d) --> (e)
如果我尝试执行以下操作,则无论边缘方向如何,它都会递归遍历所有内容,因此也会返回 (x):
TRAVERSE * FROM (SELECT FROM a) LIMIT -1`
如果我不t traverse *, but
outE()`,它只会检索起始节点及其直接邻居:(a)、(b)、(d),因此它不会进行递归。
traverse outE() from (SELECT FROM a) LIMIT -1
我也尝试按照 here 的文档进行操作,并遍历了 V.out, E.in
但它只是 returns (a) 而没有遍历。
traverse V.out, E.in from (SELECT FROM a) LIMIT -1`
也尝试过变体,例如 WHILE $depth < 10
,但这没有任何区别,现在我被卡住了。
运行 OrientDB 2.0.12
图表:
从#33:289990 开始递归地只获取输出边的遍历查询:
traverse out('IsFriendsWith') from #33:289990
递归地获取多于一条边的遍历查询class 传出顶点:
traverse out('IsFriendsWith'), out('secondEdgeClassName') from #33:289990
递归获取边和顶点实例的遍历查询:
traverse out('IsFriendsWith'), outE('IsFriendsWith') from #33:289990