使用OrientDB

时间:2015-07-22 11:34:33

标签: graph-databases 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,但它只返回(a)而不进行遍历。

traverse V.out, E.in from (SELECT FROM a) LIMIT -1`

还尝试使用WHILE $depth < 10之类的变体,但这没有任何区别,现在我被卡住了。

运行OrientDB 2.0.12

1 个答案:

答案 0 :(得分:6)

图表: graph friend model representation

遍历查询从#33开始递归获取传出边:289990:

traverse out('IsFriendsWith') from #33:289990

output of the traversal query

遍历查询以递归方式获得多个边缘类传出顶点:

traverse out('IsFriendsWith'), out('secondEdgeClassName') from #33:289990

遍历查询以递归方式获取边和顶点实例:

traverse out('IsFriendsWith'), outE('IsFriendsWith') from #33:289990