首页 > 解决方案 > ArangoDB:图遍历中的顺序

问题描述

我有一个非常标准的 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 做到这一点?

标签: graph-databasestraversalarangodbaql

解决方案


查询的作用是:

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

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

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

排序依据将在BDorder (1) 之前返回CE (0 )。因为两条边具有相同的值,所以不确定是先返回 C 还是 E,然后再返回 B 或 D。

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

SORT LENGTH(p.edges), e.order

LENGTH(p.edges)为您提供当前的遍历深度。它首先按深度排序,然后按边缘属性排序,并为您提供所需的结果顺序:CBED


推荐阅读