ArangoDB:边缘连接到其他边缘的遍​​历

时间:2016-10-22 01:19:06

标签: graph-databases arangodb aql

我最近读到ArangoDB能够将边连接到图中的其他边。在这种情况下,如何查询路径工作?例如:

car <-------- part
        ^
        |
        |
installationEvidence

在这种情况下,installationEvidence是连接到汽车零件之间边缘的节点。从汽车节点开始,返回installationEvidence而不是part的AQL是什么?在installationEvidence图层考虑了partp.vertices[1]吗?

1 个答案:

答案 0 :(得分:3)

在ArangoDB中,边缘是一种特殊类型的文档。 这就是为什么你可以存储指向其他边缘的边缘。 从查询的角度来看,这个边有两个方向: A)遍历导致target edge。在这种情况下,它被假定为一般类型的文档,并且遍历将不遵循target edge的任何方向。 这意味着您必须在语句中编写2个遍历步骤。 边缘的第一个结尾。 第二个从边缘的_from_to开始。 在您的情况下,查询可能如下所示:

FOR edge IN 1 OUTBOUND @installationEvidece @@edges1
  LET car = DOCUMENT(edge._to)
  RETURN car

B)遍历穿过边缘,其边缘指向它。 这种情况比较复杂。在ArangoDB的架构中,“顶点”对它的附着边缘一无所知,边缘知道它们的顶点。 在这种情况下你可以做的是再次写两个遍历语句,其中第二个以遇到的边缘开始,例如:

FOR part,edge IN 1 INBOUND @car @@edges1
  FOR installationEvidence IN 1 INBOUND edge @@edges2
    [...]

暂时我们没有遇到客户的任何使用案例,使上述遍历更加透明。如果这对您至关重要,请与我们联系,我们可以提高优先级,使这类查询更容易制定。