ArangoDB:图遍历中的顺序

时间:2018-11-27 15:45:56

标签: graph-databases traversal arangodb aql

我有一个相当标准的graphql,它表示一个树结构:

graph

我想遍历图并根据在每个边上设置的order强制顺序:

A-> C

A-> B-> E

A-> B-> D

我试图在查询中添加SORT,但是它对整个结果数组进行了排序,这不是我想要的:

FOR v, e, p IN 1..1000 OUTBOUND A
    edge_collec
    SORT e.order
    RETURN v

是否可以使用AQL做到这一点?

1 个答案:

答案 0 :(得分:1)

查询的作用是:

  • 从起始顶点A开始跟踪边缘集合edge_collec中的所有出站边缘
  • 然后按边缘属性order
  • 升序排列
  • 返回顶点(每个找到的路径的最后一个顶点)

边缘属性e.order为0或1:

  • A --[ order: 1 ]--> B
  • A --[ order: 0 ]--> C
  • B --[ order: 1 ]--> D
  • B --[ order: 0 ]--> E

order排序将在 B D 之前返回 C E (0)。 (1)。 因为两个边的值相同,所以不确定是先返回C还是E,再返回B还是D。

如果要在深度= 2的顶点之前返回深度= 1的顶点,但仍在每个深度级别按order排序,则可以使用:

SORT LENGTH(p.edges), e.order

LENGTH(p.edges)为您提供当前遍历的深度。它首先按深度排序,然后按edge属性排序,然后为您提供所需的结果顺序: C B E D