【问题标题】:Traverse directed edges recursively with OrientDB使用 OrientDB 递归遍历有向边
【发布时间】:2015-07-22 11:34:33
【问题描述】:

我正在尝试从给定节点递归遍历出站边缘,而不是入站边缘。我想要查询结果中的边和顶点。

在下图中,从(a)开始,我需要(a),(b),(c),(d),(e),包括边缘,但不包括(c)之后的部分,即是<-- (x)

(a) -->  (b) --> (c) <-- (x)
 ˙-->  (d) --> (e)

如果我尝试执行以下操作,那么它会递归遍历所有内容,而与边缘方向无关,因此也会返回 (x):

TRAVERSE * FROM (SELECT FROM a) LIMIT -1` 

如果我不使用t traverse *, butoutE()`,它只检索起始节点及其直接邻居:(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 &lt; 10,但这并没有任何区别,现在我被卡住了。

运行 OrientDB 2.0.12

【问题讨论】:

  • 它对我有用。是你要找的吗?如果是这样,您能否将我的答案标记为正确?

标签: graph-databases orientdb


【解决方案1】:

图表:

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

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

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

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

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

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

【讨论】:

  • TRAVERSE out('xxx') 只返回遍历的顶点,不返回边。但是,这给了我缺失的提示。我试过TRAVERSE out('xxx'), outE('xxx') 所以现在我可以得到边和顶点:)
  • 好吧,我在答案末尾添加了查询。我认为您只想要顶点:p您现在可以将我的答案标记为正确吗? :3
  • 我编辑了你的答案,说你也想要输出中的边缘:p
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多