ArangoDB:图遍历中的顺序

ArangoDB: order in graph traversal

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

我想进行图遍历并根据我在每条边上设置的 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 来做到这一点?

查询所做的是:

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

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

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

order 排序将 return CE (0) 在 之前BD (1)。 因为两条边有相同的值,所以C和E是先returned,B还是D是第三returned是不确定的。

如果您希望深度 = 1 的顶点在深度 = 2 的顶点之前被 return 编辑,但仍然在每个深度级别按 order 排序,您可以使用:

SORT LENGTH(p.edges), e.order

LENGTH(p.edges) 给你当前的遍历深度。它首先按深度排序,然后按边缘属性排序,然后给出所需的结果顺序:C B E D